计算两个列表中的数字出现次数并返回一个列表

时间:2011-12-05 22:01:49

标签: python list list-comprehension

我试图计算两个列表中出现0的次数,并使用python保存该数字。我试图使用'list comprehension'命令把它放到第三个列表中,但我没有得到我想要的输出。

我的两个清单是:

list1 = [0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]
list2 = [0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0]

因此,每当在每个列表的同一位置出现0时,我想将“0”附加到新列表中。我想对那些做同样的事情。

新列表应如下所示:

newlist = [0,1,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1]

感谢您提前获得帮助,我一直试图弄清楚如何在几个小时内完成这项工作,但无济于事!

5 个答案:

答案 0 :(得分:5)

您可以使用列表推导,如下所示:

answer = [x for x, y in zip(list1, list2) if x == y]

或者,您可以使用简单的列表操作来解决而不列表推导:

answer = []
for x, y in zip(list1, list2):
    if x == y:
        answer.append(x)

在这两种情况下,answer都是:

[0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]

答案 1 :(得分:1)

[x or y for x,y zip(list1, list2)]

答案 2 :(得分:0)

[0 if x == (0,0) else 1 for x in zip(list1,list2)]

答案 3 :(得分:0)

解决方案

如果您希望列表由01 01出现在两个列表中的相同位置的顺序排列,那么你可以使用以下列表理解:

result = [a for a, b in zip(list1, list2) if a==b]

测试

然后测试您的值:

>>> newlist = [a for a, b in zip(list1, list2) if a==b]
>>> newlist
[0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]

你看到结果不符合你的期望:

>>> newlist == [0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1]
False

所以你的问题是:你提供正确的结果是预期的结果吗?

答案 4 :(得分:0)

list1 = [0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1]
list2 = [0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0]
temp = [ list1[i] if list1[i] == list2[i] else 2 for i in range( 0, len(list1) )]
answer = [value for value in temp if value != 2]
print( answer )