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

时间:2019-06-28 22:29:51

标签: python list dictionary

我的问题是我目前正在解决的问题的结果。我需要做的是使用类似的东西:

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是否等于string_1,并且(以后)还要获取满足条件的顶级列表项的索引。

我知道我可以使用附加的for循环使用if语句实现它,以循环遍历顶级列表中的所有元素,但是我不想避免这种情况。我希望单线衬里最好加上“ in”,但如果不可能的话,就别无选择。

我还需要为字典而不是列表做完全相同的事情(我希望它将使用或多或少的相同解决方案)。

1 个答案:

答案 0 :(得分:4)

您应在此处使用any(..)

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

对于可迭代的字典,它完全相同,除了键可能是非整数,例如:

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]]