我有一个清单:
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]
这似乎有点不必要,有没有人有一个更有说服力的方法,根据该字符串的一部分在列表中查找字符串的索引
您可以将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)