Комбинации в списке в python - PullRequest
2 голосов
/ 10 марта 2020

Итак, я получил список в python примерно так:

[1,2,3,4]

И я хочу, чтобы комбинации между числом 3 с каждым числом были примерно такими:

[(1,3),(2,3),(3,4)]

Есть что-то, что я могу использовать? Я знаю, что есть что-то, называемое itertools, но я новичок, поэтому я не уверен, как его использовать.

Спасибо!

Ответы [ 4 ]

1 голос
/ 10 марта 2020

вы можете использовать списочное понимание с itertools.combinsk :

import itertools

[e for e in itertools.combinations([1,2,3,4], 2) if 3 in e]

вывод:

[(1, 3), (2, 3), (3, 4)]

еще лучше, вы можете использовать itertools.repeat:

from itertools import repeat

l = [1,2,3,4]
[(f, s) for f, s in zip(l, repeat(3)) if f != 3]

вывод:

[(1, 3), (2, 3), (4, 3)]
1 голос
/ 10 марта 2020

Простой способ сделать это - использовать al oop:

list2 = []
for x in list1:
     list2.append((x,3))
print(list2)

Если вы хотите избавиться от (3,3), используйте:

list2 = []
for x in list1:
     if x != 3:
          list2.append((x,3))
print(list2)
1 голос
/ 10 марта 2020

Возможно, вы захотите использовать понимание списка:

orig_list = [1,2,3,4]
[(entry, 3) for entry in orig_list if entry != 3] # [(1, 3), (2, 3), (4, 3)]

Если вас не интересуют повторяющиеся значения, вы можете превратить его в набор:

orig_list = set([1,2,3,4])
[(entry, 3) for entry in orig_list if entry != 3] # [(1, 3), (2, 3), (4, 3)]
0 голосов
/ 10 марта 2020

Вы можете использовать:

l = [1,2,3,4]
[(l[i], 3) for i in range(l.index(3))] + [(3, l[i]) for i in range(l.index(3)+1, len(l))]

, что дает вывод:

[(1, 3), (2, 3), (3, 4)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...