У меня есть список:
foolist = ['123-asd', '234-asd', '345-asd']
Я хочу найти индекс строки, которая содержит "234". На данный момент у меня есть это:
boollist = ['234' in i for i in foolist]
который создаст список True и Falses для каждого индекса для foolist
.
Затем, чтобы найти индекс, [print(i) for i,j in enumerate(foolist) if j==True]
Это кажется abit ненужным, у кого-то есть более красноречивый метод поиска индекса строки в списке на основе части этой строки
Вы можете использовать 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'
использовать 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)
None
в понимании списка, бит плохой практики использует понимание списка для побочных эффектов и отбрасывает результат.
[i for i,j in enumerate(foolist) if '234' in j]
?