У меня есть список строк:
my_list = ["John 123", "Johnny 232", "Jane 344"]
Что я хочу сделать, так это проверить, не содержит ли строка в my_list точно переменную, но все остальное в строке после переменной не имеет значения.
Например, если у меня есть var = "John"
, my_list[0] вернет True, но и my_list[1], и my_list[2] вернут False. Мне нужно проверить весь список или пока один из них не вернет True, в зависимости от того, что наступит раньше.
Обновлено: Вот фрагмент фактического кода, над которым я работаю:
names = []
rank, male, female = info
for name in names:
if male not in names:
names.append(male + " " + rank + '\n')
if female not in names:
names.append(female + " " + rank + '\n')
информация извлекается из html-файла, но, например, это будет что-то вроде ['123', 'John', 'Jane']
, числа, за которым следуют мужское имя и женское имя. Моя проблема на данный момент, очевидно, заключается в том, что операторы if всегда будут истинными, что приведет к дублированию записей, кроме числа.
Привет! Что вы уже сделали: D, вы можете вставить свой код.
Добавлен фактический фрагмент кода
@StackOffended Код, вставленный выше
Вы можете проверить мой ответ, если он удовлетворяет решению вашей проблемы: D
Теперь вы оставляете нас в недоумении, что внутри info
. Пожалуйста, сократите это до минимального воспроизводимого примера.
Для этого вы можете использовать функцию any()
вместе с пониманием списка.
if any(var in item for item in my_list)
Это не работает. Если var = "John", то и "John", и "Johnny" вернут true, тогда как должен возвращать только "John".
@IanWaddell Ааа, я пропустил это требование. Виноват.
Вы могли бы сделать это с регулярными выражениями легко. Понимание списка
import re
my_list = ["John 123", "Johnny 232", "Jane 344"]
#Just an output list for you to see the True & False output
outputlist = []
for name in my_list:
if re.search(r'\bJohn\b',name) != None:
outputlist.append(True)
else:
outputlist.append(False)
'''
#List comprehension
outputlist = [True if re.search(r'\bJohn\b',name) != None else False for name in my_list]
'''
print(outputlist)
Выход:
[True, False, False]
[Finished in 0.3s]
Это отлично работает, но как мне сделать то же самое с переменной вместо жесткого кодирования «Джон»? я плохо разбираюсь в регулярных выражениях, ха-ха
ты имеешь в виду variable
? содержащий определенную строку? вы можете просто изменить регулярное выражение, например, как это re.search(r'\b'+variable+'\b',name)
Используйте границы слов, например. для первого случая найдите
\bJohn\b