我正在解决一个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
感谢。
答案 0 :(得分:1)
要获得您想要的输出,您需要更改逻辑:
[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
如果与val[0]
的子列表中的每个元组对应的a
位于b
中,请添加idx
,即元素的索引。
答案 1 :(得分:0)
您需要了解enumerate
的作用。它只是一个特殊的功能,它将为您提供的数组evelemt用于。
for book in books:
print book
for author in authors:
print author
会给你
Book A
Book B
Book C
Author A
Author B
Author C
但如果您需要计算,要制作一个包含数字的便捷列表,您可以使用enumerate
for i, book in enumerate(books):
print i, book
for i, author in enumerate(authors):
print i, author
会给你
1 Book A
2 Book B
3 Book C
1 Author A
2 Author B
3 Author C
这是enumerate
的作用。它为您正在使用的数组中的每个元素提供了一个nubmer。而已。
如果要创建全局计数器,则应考虑使用全局变量。