Есть ли лучшая альтернатива для вложенных циклов for?

#python #for-loop

#python #для цикла

Вопрос:

Добрый день,

Я хотел бы спросить, есть ли лучшие альтернативы (или просто при написании кода) для вложенных for циклов? Например, прямо сейчас я пишу это так:

 list_a = [1, 1, 2 ,3]
list_b = [[1, 2], [3, 10]]

for a in list_a:
    for b in list_b:
        if a >= b[0] and a <= b[1]:
            # Do something here
            break
 

Комментарии:

1. Вы хотите прерваться только из внутреннего цикла или из обоих циклов?

2. это полностью зависит от того, что вы пытаетесь сделать.

3. Вам нужно обязательное break ?

4. @devguy Только из внутреннего цикла!

Ответ №1:

Это действительно зависит от того, что вы пытаетесь сделать. Если вы знаете, что оба списка имеют одинаковую длину, то вы можете использовать один цикл. Однако сначала вам нужно flatten создать свой вложенный список for list_b (что почти похоже на выполнение двух циклов for, но более лаконично и быстрее).

Если вы спрашиваете о вложенных циклах для сортировки заданного массива, то есть много ресурсов, которые вы могли бы найти в Google или YouTube, которые очень полезны (сортировка слиянием, быстрая сортировка).

Во всяком случае, вот пример кода:

 
list_a = [1, 1, 2 ,3]
list_b = [[1, 2], [3, 10]]
flattened_b = [item for sublist in list_b for item in sublist]
for idx in range(len(list_a)):
    print(list_a, flattened_b)
 

Интересный блог о сглаживании списков: http://rightfootin.blogspot.com/2006/09/more-on-python-flatten.html

Комментарии:

1. » (что почти похоже на выполнение двух циклов for, но более лаконично и быстрее)» на самом деле не быстрее, нет. На самом деле, это почти наверняка медленнее.