我正在尝试创建一个将2个列表列表和一个整数作为输入的函数:
list1 = [[2, 47, -42], [-42, 29, -45], [24, -11, 18], [-34, -4, -14], [-42, -45, 49], [-21, -6, 12]]
list2 = [[13, 15, -11], [35, -5, -42], [-42, 29, -45], [-48, 8, 26], [-42, 29, -45]]
integer = -42
然后,首先使用-42作为变量检查list1中的元组,然后使用-42检查list1中list2中相同元组的计数。 对于上面的示例,输出应为:2 as
In list1(tuple with -42): [[2, 47, -42],[-42, 29, -45],[-42, -45, 49]]
list2(similar tuples):[[-42, 29, -45],[-42, 29, -45]]
count: 2
直到现在我一直在尝试:
res = sum(x == y for x, y in zip(list1,list2))
上部代码没有给出任何结果。
答案 0 :(得分:1)
您的第一个条件是守卫,然后使用第二个条件来做sum()
,例如:
In []:
sum(sum(x == y for y in list2) for x in list1 if integer in x)
Out[]:
2
但是,如果使用collections.Counter()
将这些确实是元组,则可以以不同的方式(更有效地)执行此操作:
In []:
c = Counter(tuple(y) for y in list2)
sum(c[tuple(x)] for x in list1 if integer in x)
Out[]:
2
答案 1 :(得分:1)
def abs_double_list(l):
return [[abs(y) for y in x] for x in l]
res = sum( x in abs_double_list(list1) and abs(integer) in x for x in abs_double_list(list2))
可以解决您的问题。问题是您不将列表中的每个元素相互比较,因为zip在列表中使元素对成对,因此您仅将元素对彼此进行比较(索引0、1、2、3等元素,但是从来没有其他索引)
@Edit与负值无关