Как преобразовать цикл для понимания списка в Python - PullRequest
0 голосов
/ 24 января 2019

У меня есть вложенный цикл for, и я хотел бы преобразовать его в понимание списка в python.Как я могу это сделать

all_combinations = []
for i in range(0,size):
    for j in range(i,size):
        if i!=j:
            all_combinations.append((i,j))

Ответы [ 4 ]

0 голосов
/ 24 января 2019

Почему бы не просто

all_combinations = [(i,j)  for i in range(size) for j in range(i+1,size) ]

Не нужно тест if, потому что он никогда не будет включать (i,i)

0 голосов
/ 24 января 2019
all_combinations = [(i,j)  for i in range(size) for j in range(i,size) if i!=j]
0 голосов
/ 24 января 2019

Все остальные ответы отвечают на ваш вопрос, но я хотел бы предложить лучшую альтернативу, itertools.combinations:

from itertools import combinations

print(list(combinations(range(3), 2)))
# [(0, 1), (0, 2), (1, 2)]

Почему это лучше?

  • Тамэто не повторение.Мы указываем range(3) только один раз.
  • Это проверено, стандартный код библиотеки.
  • Короче и удобочитаемее.
  • (Если вы используете CPython, который вы, вероятно,)реализован на C, что означает, что он (обычно) быстрее, чем вложенные циклы Python.
0 голосов
/ 24 января 2019

Понимание списка:

all_combinations = [ (i,j) for i in range(0,size) for j in range(i,size) if i!=j ]
...