我有一个列表:
<mat-tree-node #tree *ngIf = "nodes" (initialized)="onTreeLoad($event)" [options]="options" [focused]="true" [nodes]="nodes">
我想找到包含“ 234”的字符串的索引。目前,我有这个:
foolist = ['123-asd', '234-asd', '345-asd']
,它将为boollist = ['234' in i for i in foolist]
的每个索引生成一个True和False的列表。
然后找到索引foolist
这似乎有点多余,没有人有一种更雄辩的方法来基于字符串的一部分在列表中查找字符串的索引
答案 0 :(得分: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)