我正在解决一个 python 练习,但无法理解枚举操作: 谁能告诉我这是如何工作的:
>>> a = [[('A', {}), 1, None, None, 0], [('B', {}), 1, None, None, 0]]
>>> b = [('A', {}), ('B', {})]
>>> for each in b:
... my_idx = [idx for idx, val in enumerate(a) if a[idx][0] == each][0]
... print my_idx
...
它产生的输出是:
0
1
为了理解这一点,我做了以下更改:
>>> a = [[('A', {}), 1, None, None, 0], [('B', {}), 1, None, None, 0], [('A', {}), 1, None, None, 0], [('B', {}), 1, None, None, 0]]
>>> b = [('A', {}), ('B', {}), ('A', {}), ('B', {})]
>>> for each in b:
... my_idx = [idx for idx, val in enumerate(a) if a[idx][0] == each][0]
... print my_idx
...
并认为它应该打印:
0
1
2
3
但它产生了:
0
1
0
1
我哪里错了?我应该如何修改它以产生:
0
1
2
3
谢谢。
最佳答案
要获得您想要的输出,您需要更改逻辑:
[idx for idx, val in enumerate(a) if any(val[0] == x for x in b)]
打印输出时:
print("\n".join([str(idx) for idx, val in enumerate(a) if any(val[0] == x for x in b)]))
0
1
2
3
您还可以使用 in
测试成员身份:
print("\n".join([str(idx) for idx, val in enumerate(a) if val[0] in b]))
0
1
2
3
如果a
子列表中的每个元组对应的val[0]
在b
中,则添加idx
这是元素的索引。
关于python - 理解Python中的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26390779/