3 回答
TA貢獻1773條經驗 獲得超3個贊
這是一個可能的解決方案:
result = data + [['nums'] + [sum(1 if data[row][col] == 'X' else 0
for row in range(1, len(data)))
for col in range(1, len(data[0]))]]
此操作后result如下所示:
[["", "a", "b", "c"],
["a", "X", 1, "X"],
["b", "X", 2, "X"],
["c", "X", "foo", 3]]
["nums", 3, 0, 2]]
TA貢獻1797條經驗 獲得超6個贊
我修改了你的代碼。X所以我添加了一個字典來記錄一列中出現的次數。
data[1:]--> 將忽略第一行 row[1:]--> 將忽略每一行的第一列值。
def foo(data):
new_data = data[1:]
d = { i:0 for i in range(len(data))}
d.update({0:"nums"})
for row in (new_data):
for col_num, col in enumerate(row[1:], start=1):
if col == "X":
d[col_num] += 1 #e.g: if indexes = [1, 3, 1, 3, 1]: there is 3 "X":s in column 1, and 2 "X":s in column 3
data.append(list(d.values()))
return data
foo(data)
[['', 'a', 'b', 'c'],
['a', 'X', 1, 'X'],
['b', 'X', 2, 'X'],
['c', 'X', 'foo', 3],
['nums', 3, 0, 2]]
TA貢獻1802條經驗 獲得超10個贊
numpy 很方便
res=[col.tolist().count('X') for col in numpy.transpose(data)]
res[0]='nums'
data+[res]
或者,
res=numpy.count_nonzero(numpy.array (data)=='X',axis=0).tolist()
res[0]='nums'
data+[res]
添加回答
舉報
