Pythonic подход, позволяющий избежать вложенных циклов для конкатенации строкPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Pythonic подход, позволяющий избежать вложенных циклов для конкатенации строк

Сообщение Anonymous »

Я хочу найти все 5-значные строки, для которых
  • первые три цифры находятся в моем первом списке,
  • со второго по четвёртый список — во втором, а
  • с третьего по пятый — в последнем списке:
l0=["123","567","451"]
l1=["234","239","881"]
l2=["348","551","399"]

таким образом должно получиться: ['12348', '12399'].
Поэтому я написал функцию is_successor(a, b), который проверяет, перекрываются ли a и b:
def is_successor(a:str,b:str)->bool:
"""tests if strings a and b overlap"""
return a[1:]==b[:2]

Затем я могу достичь своей цели, написав эту вложенную структуру цикла/проверки, которая в основном добавляется обратно к передним строкам и в результате дает все действительные строки:
pres=[]
for c in l2:
for b in l1:
if is_successor(b,c):
for a in l0:
if is_successor(a,b):
pres.append(a[0]+b[0]+c)

pres
  • Я знаю, что мог бы написать это как понимание списка, но для моих исходных данных у меня больше вложенных списков, и я теряю читабельность даже при понимании списка.< /li>
    Я начинаю с l2 -> l0, потому что в моих исходных данных списки становятся длиннее, чем ниже индекс, и, таким образом, я могу отфильтровать больше случаев раньше, таким образом .
  • Один цикл по всем комбинациям l0,l1,l2 и проверка последовательности всех элементов a,b,c одновременно будет работать, но это проверка гораздо больше ненужных комбинаций, чем в моей нынешней конструкции.
Вопрос:
Как можно ли отвлечь этот вложенный цикл и вызов условной проверки? Есть ли питонический способ зафиксировать повторение for -> is_successor()?
Более крупный ввод может быть:

primes=[2,3,5,7,11,13,17]

lsts=[
[
str(j).zfill(3)
for j in range(12,988)
if not j%primes
]
for i in range(len(primes))
]


Подробнее здесь: https://stackoverflow.com/questions/788 ... catination
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Pythonic подход, чтобы избежать вложенных петлей для конкатенации струны
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Подход, позволяющий избежать проблемы OOM для параллельных задач.
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Правильный подход к навигационному графику, позволяющий объединить функции покупателя и продавца в одном приложении?
    Anonymous » » в форуме Android
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Стиль написания для предотвращения конкатенации строк в списке строк
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Поведение циклов for в C++ и циклов while
    Anonymous » » в форуме C++
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»