Просто измените тот же процесс, который вы нашли в другом посте.Расположите циклы в одном и том же порядке:
for i in e:
for e in LP:
if i in ('123456789'):
print(i)
Для кода необходимо заранее указать e
и LP
, поэтому результат, который вы видите , полностью зависит от другого кода, выполняемого перед вашим спискомпонимание .
Если предположить, что e
было установлено на '3a'
(последний элемент в LP
из вашего кода, который выполнял полные циклы), то for i in e
будет выполняться дважды, сначалас i
, установленным на '3'
.Затем мы получаем вложенный цикл, for e in LP
, и, учитывая ваш вывод, LP
имеет длину 4 элемента.Это повторяет 4 раза и каждую итерацию i == '3'
, поэтому тест if
проходит и '3'
добавляется к выводу.Следующая итерация for i in e:
устанавливает i = 'a'
, внутренний цикл запускается 4 раза, но тест if
не проходит.
Однако мы не можем знать наверняка потому что мы не знаем, какой код был запущен последним в вашей среде, для которого были установлены e
и LP
для начала.
Я не уверен, почему ваш исходный код использует str.split()
, затем выполняет итерациинад всеми символами каждого слова.В любом случае, пробел никогда не пройдет через ваш фильтр if
, поэтому вы можете просто зацикливаться непосредственно на полном значении String
.Тест if
можно заменить на тест str.isdigit()
:
digits = [char for char in String if char.isdigit()]
или регулярное выражение :
digits = re.findall(r'\d', String)
и, наконец, если это головоломка с переупорядочением, вам нужно разделить строки на число (для упорядочения) и остаток (для объединения);отсортировать слова по извлеченному числу и извлечь остаток после сортировки:
# to sort on numbers, extract the digits and turn to an integer
sortkey = lambda w: int(re.search(r'\d+', w).group())
# 'is2' -> 2, 'Th1s1' -> 1, etc.
# sort the words by sort key
reordered = sorted(String.split(), key=sortkey)
# -> ['Thi1s', 'is2', '3a', 'T4est']
# replace digits in the words and join again
rejoined = ' '.join(re.sub(r'\d+', '', w) for w in reordered)
# -> 'This is a Test'