Python 嵌套列表和迭代

标签 python python-2.7

我是 Python 的新手,我进行了搜索,但找不到我要找的东西。如果有人问这个问题,如果我因为不知道我想要实现的目标的名称而找不到它,我会提前道歉。我很乐意阅读您可能建议的任何文件。

我有一个列表列表。例如=> [int, 'str']

t = [[0234, 'str_0'],
     [1267, 'str_1'],
     [2445, 'str_2']]

我想知道 a str 是否存在于 list t 的列表之一的索引 (1) 位置。 我可以用一个包含 2 个 for 或 while 循环的函数来做到这一点,但我正在寻求的是实现这一点,如果可能的话,使用一次迭代。我想学习最短的函数。

对于输入 str('str_3'),我想得到 int(2)(在其自己的第一个索引位置上具有 str_3 的列表的索引) 对于 str_1,我想得到 int(0)

对于 str_1234 我想得到 False 因为它不在 list t 的任何列表中强>

作为新手,我通常会这样做:

for n in range(len(t)):
    if t[n][1] == 'str_1'
        return n
    return False

如果可能的话,我寻求的是一种更好、更短的方法来在一行代码中实现这一点,或者只是简单地学习是否有比你们中的任何一个更聪明、更好或更 pythonic 的方法肯定更有经验会推荐。

谢谢

最佳答案

[n for n, (i, s) in enumerate(t) if s == 'str_3']

解释:

>>> t = [[100, 'str_1'], [200, 'str_2'], [300, 'str_3']]

# Use enumerate to get each list item along with its index.
>>> list(enumerate(t))
[(0, [100, 'str_1']), (1, [200, 'str_2']), (2, [300, 'str_3'])]

# Use list comprehension syntax to iterate over the enumeration.
>>> [n for n, (i, s) in enumerate(t)]
[0, 1, 2]

# An if condition can be added right inside the list comprehension.
>>> [n for n, (i, s) in enumerate(t) if s == 'str_3']
[2]
>>> [n for n, (i, s) in enumerate(t) if s == 'str_1234']
[]

这将返回所有匹配的索引,因为可能有多个索引。

如果您知道只有一个索引,我可以建议使用字典而不是嵌套列表吗?使用字典,您可以使用非常简单的语法在恒定时间内查找元素,而不必迭代。

>>> t = {'str_1': 100, 'str_2': 200, 'str_3': 300}

>>> 'str_3' in t
True
>>> t['str_3']
300

>>> 'str_1234' in t
False
>>> t['str_1234']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'str_1234'

关于Python 嵌套列表和迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019825/

相关文章:

java - 从 Java 调用 Python 方法时导入 NLTK 失败

python - numpy数组将多列除以一列

python - 如何在另一个 "frame window"内的窗口中查找元素的 xpath

python - Python 3.4 上的 GetProcAddress 奇怪行为

python-2.7 - 无法设置 Scrapy 项目

python - 同一变量的两个不同值 "args"

python - Pandas 被意外的分隔符搞糊涂了

python - 在 Python 中使用 AND 和 NOT 运算符

python - f-string: single '}' is not allowed Python SPARQL 查询问题

python-2.7 - Dataframe 上的对数