Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Перестановки Itertools

Автор вопроса: Demonking28Ответов: 1

У меня есть список, скажем, x=[1,2,3,4,5] и я хочу посмотреть на разные перестановки этого списка, взятые по два числа за раз.

x=[1,2,3,4,5]
from itertools import permutations
y=list(i for i in permutations(x,2) if i[0]<i[1])
print(y)

вывод: [(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]

Но я также хочу, чтобы на выходе было [(1,1),(2,2),(3,3),(4,4),(5,5)]. Как это исправить?

  • Я надеюсь, вы можете добавить их сами, не так ли? Miraj50 05.11.2017
  • Не используйте list(<genexpr>). Просто используйте понимание списка (замените list(...) на [...]). Martijn Pieters 05.11.2017
  • @ Miraj50 Это только часть вопроса. В списке может быть любое количество значений. Demonking28 05.11.2017
  • Да, так что после этого сделайте y.extend([(i,i) for i in x]). Miraj50 05.11.2017
  • Итак, вы хотите иметь комбинации с повторами? Вам действительно нужны уникальные наборы продуктов x? Martijn Pieters 05.11.2017
  • как насчет list(i for i in itertools.combinations_with_replacement(x,2) if i[0]<=i[1]) Jean-François Fabre 05.11.2017

pythonitertools

Ответы

Ответ 1 · рейтинг 4 · Martijn Pieters

Вместо этого вам нужно combinations_with_replacement():

>>> from itertools import combinations_with_replacement
>>> list(combinations_with_replacement(x, 2))
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 2), (2, 3), (2, 4), (2, 5), (3, 3), (3, 4), (3, 5), (4, 4), (4, 5), (5, 5)]

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы