如何在选定的子列表索引中提取、访问和使用列表的所有值?

2024-06-02 07:49:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是我目前正在讨论的问题的结果。我需要做的是使用这样的方法:

if myString in list[][1]:
   do something

…在这样的结构上:

[
[object1Name, string_1, string_2],
[object2Name, string_1, string_2],
[object3Name, string_1, string_2],
[object4Name, string_1, string_2]
]

我需要检查myString是否等于任何顶级列表项中的字符串\u 1,并且(稍后)还要获取满足条件的顶级列表项的索引

我知道我可以使用附加的for-loop-with-if语句来实现它,从而遍历顶级列表中的所有元素,但我不想避免这种情况。我要一行,最好是带“in”的,但如果不可能的话,就不要别的了

我还需要对dictionary而不是list做完全相同的事情(我希望这将或多或少地使用相同的解决方案)


Tags: 方法in列表stringif结构顶级do
1条回答
网友
1楼 · 发布于 2024-06-02 07:49:59

您应该在这里使用any(..)

if any(myString == sublist[1] for sublist in lst):
    # ... do something
    pass

对于一个iterable字典,它是完全相同的,只是键可能是一个非整数,如:

if any(myString == subdict[some_key] for subdict in lst):
    # ... do something
    pass

因此,我们在这里迭代sublist中的lst。如果对于sublist中的一个,myString == sublist[1],那么这将成功,否则它将失败

因此我们这里使用发电机。any(..)将从它找到一个True的项目时停止。然而,这仍然在线性时间内运行(最坏情况)

编辑:我们可以通过以下方式获得第一个索引:

idx = next((idx for idx, sublist in enumerate(lst) if myString == sublist[1]), None)

如果不存在这样的索引,则返回None

或者我们可以通过列表理解检索所有索引:

idcs = [idx for idx, sublist in enumerate(lst) if myString == sublist[1]]

相关问题 更多 >