我有多个字符串列表。我需要将列表的每个位置的内容与其他列表中的同一位置进行比较。然后计算几个相同的数量(不包括" 0"(。列表的长度相同。这是一个示例:
list1 = ["a", "b", "c", "f", "0"]
list2 = ["a", "b", "e", "f", "0"]
list3 = ["a", "0", "c", "f", "0"]
因此,仅在所有列表上在同一位置上常见的"a"
和"f"
(" 0"不计数(,然后我需要等于2的输出。
我尝试了以下策略,但失败了,因为它仅比较两个乘以两个,并且可以修改np.sum,以便比较所有列表。
All_lists
包含所有列表。
def scores(All_lists):
score_lin = []
score_ = 0
for j in range(len(All_lists[0])):
score_lin.append(
np.sum(
All_lists[j] == All_lists[j+1])
- min(
np.count_nonzero(All_lists[j] == '0'),
np.count_nonzero(All_rg_lists[j+1] == '0')
)
)
score_lin = [
item
for item in score_lin
if item > 0
]
score_ = sum(score_lin)
return score_
编辑:有关列表的列表。
list_ = [
[
["a", "b", "c", "f", 0],
["a", "b", "e", "f", 0],
["a", 0, "c", "f", 0]
],
[
["b", "x", "c", "f", 0],
["a", "b", "c", "f", 0],
["a", "b", "c", "f", 0]
],
]
考虑列表"列表"的列表。我需要将list[0][0] = ["a","b","c","f",0]
与list[1][0] = ["b","x","c","f",0]
进行比较,并计算两个列表中类似元素的数量,然后在此示例中对list[0][1]
和list[1][1]...
进行相同的操作。预期输出为8。
nb:列表的长度可能大于3。
您可以使用zip()
一起将这3个列表汇递在一起,然后set()
查找重复:
list1 = ["a", "b", "c", "f", "0"]
list2 = ["a", "b", "e", "f", "0"]
list3 = ["a", "0", "c", "f", "0"]
print(
sum(
len(set(i))==1 and i[0]!='0'
for i in zip(list1, list2, list3)
)
)
打印:
2
编辑:对于列表中的列表:
l = [
[
['s2', 's1', 's2', 's2', 's2', 's1', 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 's1', 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 's1', 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 's1', 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's1', 0, 0, 0, 0, 0]
],
[
['s2', 's1', 's1', 's3', 's3', 0, 0, 0, 0, 0],
['s2', 's1', 's1', 's3', 's3', 0, 0, 0, 0, 0],
['s2', 's1', 's1', 's3', 's3', 0, 0, 0, 0, 0],
['s2', 's1', 's1', 's3', 's3', 0, 0, 0, 0, 0],
['s2', 's1', 's3', 's3', 0, 0, 0, 0, 0, 0]
],
[
['s2', 's1', 's2', 's2', 's2', 0, 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 0, 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 0, 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 0, 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's3', 's3', 0, 0, 0, 0]
]
]
from pprint import pprint
total_sum = 0
for item in zip(*l):
pprint(item)
s = sum(
len(set(i))==1 and i[0]!=0
for i in zip(*item)
)
total_sum += s
print(s)
print('*' * 80)
print('Total sum =', total_sum)
打印:
(['s2', 's1', 's2', 's2', 's2', 's1', 0, 0, 0, 0],
['s2', 's1', 's1', 's3', 's3', 0, 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 0, 0, 0, 0, 0])
2
********************************************************************************
(['s2', 's1', 's2', 's2', 's2', 's1', 0, 0, 0, 0],
['s2', 's1', 's1', 's3', 's3', 0, 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 0, 0, 0, 0, 0])
2
********************************************************************************
(['s2', 's1', 's2', 's2', 's2', 's1', 0, 0, 0, 0],
['s2', 's1', 's1', 's3', 's3', 0, 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 0, 0, 0, 0, 0])
2
********************************************************************************
(['s2', 's1', 's2', 's2', 's2', 's1', 0, 0, 0, 0],
['s2', 's1', 's1', 's3', 's3', 0, 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's2', 0, 0, 0, 0, 0])
2
********************************************************************************
(['s2', 's1', 's2', 's2', 's1', 0, 0, 0, 0, 0],
['s2', 's1', 's3', 's3', 0, 0, 0, 0, 0, 0],
['s2', 's1', 's2', 's2', 's3', 's3', 0, 0, 0, 0])
2
********************************************************************************
Total sum = 10
如果要接受任何数量列表的通用函数,则可以使用此列表,
def score(All_lists):
z = zip(*All_lists) # zip lists together to make list of tuples
z = [t for t in z if '0' not in t] # remove all '0' entries
score_list = [1 for t in z if len(set(t))==1]
return sum(score_list)
对于这些输入列表,
list1=["a","b","c","f","0"]
list2=["a","b","e","f","0"]
list3=["a","0","c","f","0"]
All_lists = [list1, list2, list3]
致电score(All_lists)
返回2
。
您可以这样做:
list1=["a","b","c","f","0"]
list2=["a","b","e","f","0"]
list3=["a","0","c","f","0"]
print(len([len(set(x)) for x in list(zip(list1,list2,list3)) if len(set(x)) == 1 and x[0] != '0']))
输出:
2
at:
sum(a == b == c for a, b, c in zip(list1, list2, list3) if a != '0')