python - 获取两个不同列表中同一索引处的一对值的出现次数

标签 python list python-2.7

我有两个列表(大小相同)

a = [0, 0, 1, 0, 0, 1, 1, 0]
b = [2, 2, 0, 2, 1, 1, 0, 2]

假设当值“0”在列表“a”中匹配时,我需要获取值“2”在列表“b”中出现的次数。例如在前两个列表中,我希望得到 4(我在位置 0、1、3、7 的位置同时在 'a' 中有值 '0' 和在 'b' 中有值 '2')

一种方法:

len([x for x,y in zip(a,b) if x==0 and y==2])

但我想知道是否有更好的解决方案

最佳答案

如果您的数组(也许您指的是列表)会更长,请使用 itertools.izip会更好,因为 zip 将从 ab

中创建相应元素的元组列表
>>> a = [0, 0, 1, 0, 0, 1, 1, 0]
>>> b = [2, 2, 0, 2, 1, 1, 0, 2]
>>> from itertools import izip
>>> sum(x == 0 and y == 2 for x, y in izip(a, b))
4

此处,x == 0 和 y == 2 是一个 bool 表达式,因此结果将是 TrueFalse。在 Python 中,True1False0

>>> False == 0
True
>>> True == 1
True

sum 函数对所有这些求和并给出结果。

另外,请注意我们没有将列表传递给 sum([] 不存在)。这意味着我们正在传递一个生成器表达式。 sum 将调用生成器表达式来获取值。因此,不会创建临时列表,就像在您的 len 解决方案中一样,但会按需检索值。阅读有关生成器和生成器表达式的更多信息,here

因此,如果您的列表很长(因为它避免了任何临时列表构造),此​​解决方案将非常节省空间并且非常有用。

关于python - 获取两个不同列表中同一索引处的一对值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30100069/

相关文章:

python - 图像/视频处理选项

list - Haskell 列表的所有可能分区

java - 从列表中获取值并插入到字符串中

python - mylist = list() 与 Python 中的 mylist = []

python - 无法设置属性和无限递归

python - 没有名为 yaml 的模块(brew 再次破坏了我的 python)

python - 我不小心安装了 64 位和 32 位 python 2.7.8,现在它的行为很奇怪

python - 使用QSignalMapper进行QGraphicsItem之间的通信

python - Flask:Peewee model_to_dict 助手不起作用

python - 为什么 `subprocess.call` 没有调用命令