【问题标题】:Understanding enumerate in python理解python中的枚举
【发布时间】:2014-10-16 04:19:13
【问题描述】:

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

谢谢。

【问题讨论】:

  • 您到底想解决什么问题?同样if val[0]if a[idx][0] 相同
  • 给定 a 和 b,我正在尝试修改逻辑以便打印 0 1 2 3 @PadraicCunningham

标签: python list dictionary enumerate enumerated-types


【解决方案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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2012-06-02
      • 2015-08-08
      • 2021-04-21
      • 1970-01-01
      • 2012-06-26
      相关资源
      最近更新 更多