关于元组中整数值的列表比较列表

时间:2019-12-14 01:08:41

标签: python python-3.x list lambda tuples

我正在尝试创建一个将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)) 

上部代码没有给出任何结果。

2 个答案:

答案 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与负值无关