根据字符串的一部分查找列表中的字符串索引

问题描述 投票:1回答:1

我有一个清单:

foolist = ['123-asd', '234-asd', '345-asd']

我想找到包含'234'的字符串的索引。目前我有这个:

boollist = ['234' in i for i in foolist]

这将为foolist的每个索引生成一个True和Falses列表。

然后找到索引,[print(i) for i,j in enumerate(foolist) if j==True]

这似乎有点不必要,有没有人有一个更有说服力的方法,根据该字符串的一部分在列表中查找字符串的索引

python string python-3.x list
1个回答
3
投票

您可以将next与生成器表达式一起使用,并按特定字符拆分以反映字符串的结构:

foolist = ['123-asd','234-asd','345-asd']

res = next(i for i, j in enumerate(foolist) if '123' in j.split('-')[0])  # 0

如果可以有多个匹配项,则可以使用列表推导:

res = [i for i, j in enumerate(foolist) if '123' in j.split('-')[0]]  # [0]

为了平等,你应该使用j.split('-')[0]] == '123'作为你的条件。

关于打印的注意事项

在列表理解中避免使用print是一种很好的做法,因为它将返回None。您会注意到,虽然您的终端将打印它找到的索引,但您也在构建一个长度等于匹配数量的None项目列表。对于所有意图,该列表没有用处。

如果您只对打印项目感兴趣,可以使用带有生成器表达式的for循环:

for idx in (i for i, j in enumerate(foolist) if '123' in j.split('-')[0]):
    print(idx)
© www.soinside.com 2019 - 2024. All rights reserved.