Понимание списков: Как вывести новый список для каждой итерации цикла по x, когда элемент в обоих «списках» совпадает? - PullRequest
0 голосов
/ 27 декабря 2018
allDasTickets = ["9255955", "9255958", "9255960", "9255977"]
[j for j in allDasTickets for x in allDasTickets if x != j]

Итак, я получаю список из следующих списков:

['9255958', '9255960', '9255977']
['9255955', '9255958', '9255977']
['9255958', '9255960', '9255977']
['9255955', '9255958', '9255960']

т.е. список с отсутствующим соответствующим (надеюсь, это то, что я поставил выше)

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Вы забыли внутренние скобки.Они нужны вам, потому что вы пытаетесь создать список списков, а не просто плоский список.

allDasTickets = ["9255955", "9255958", "9255960", "9255977"]
[[j for j in allDasTickets if x != j] for x in allDasTickets]

приводит к

[['9255958', '9255960', '9255977'],
 ['9255955', '9255960', '9255977'],
 ['9255955', '9255958', '9255977'],
 ['9255955', '9255958', '9255960']]
0 голосов
/ 27 декабря 2018

Реверсивные работы.Ваш заданный вывод имеет ['9255958', '9255960', '9255977'] дважды и пропускает ['9255955', '9255960', '9255977'].

import itertools
allDasTickets = ["9255955", "9255958", "9255960", "9255977"]
for t in itertools.combinations(reversed(allDasTickets), len(allDasTickets) - 1):
    print(list(reversed(t)))

Отпечатки:

['9255958', '9255960', '9255977']
['9255955', '9255960', '9255977']
['9255955', '9255958', '9255977']
['9255955', '9255958', '9255960']
...