python - 理解Python中的枚举

标签 python list dictionary enumerate enumerated-types

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

相关文章:

python - 如何索引天文表中的可观察坐标

python - NLTK/NLP 构建多对多/多标签主题分类器

Python "raise from"用法

python - 如何将列表中元组的第 i 个元素映射到另一个列表中的键以形成字典

python - 混淆矩阵 Python

python - 列表搜索中的快速字符串

java - 通过在Android错误中长按从 ListView 中删除项目

python - 如何检查列表项是否存在于另一个列表中

python - 标签编码器 : How to keep a dictionary that shows original and converted variable

dictionary - 带有映射的 "if"语句中的 Golang 语法