繁体   English   中英

了解python中的枚举

[英]Understanding enumerate in python

我正在解决一个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

如果val[0]其对应于每个元组中的子列表a是在b添加idx这是元素的索引。

您需要了解enumerate作用。 这只是一个特殊的功能,它将为您提供用于数组的elelemt数量。

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 它为您正在使用的数组中的每个元素提供了一个小数字。 而已。 如果要创建全局计数器,则应考虑使用全局变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM