Как я могу использовать pop и add для создания серии списков переменных? - PullRequest
0 голосов
/ 06 октября 2019

Я новичок в python, и пытаюсь получить вывод ряда переменных в разных порядках. Например, я хочу иметь несколько списков с такими вещами, как ABC, DEF, GHI и получать выходные данные ADG, ADH, ADI, AEG, AEH ... и так далее. Я уверен, что это не так сложно, как я это делаю, но я немного растерялся из-за того, как я использую pop и добавляют циклы для этого.

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

first=[["A"],["B"],["C"]]
second=[["D"],["E"],["F"]]
third=[["G"],["H"],["I"]]
possible=[]

for letter1 in first: 
    possible.append(letter1) 
    for letter2 in second: 
        possible.append(letter2)
        for letter3 in third: 
            possible.append(letter3)
print(possible)

Выводиз этого: [['A'], ['D'], ['G'], ['H'], ['I'], ['E'], ['G'], ['H'], [' I '], [' F '], [' G '], [' H '], [' I '], [' B '], [' D '], [' G '], ['H'], ['I'], ['E'], ['G'], ['H'], ['I'], ['F'], ['G'], ['H'], ['I'], ['C'], ['D'], ['G'], ['H'], ['I'], ['E'], ['G'], [' H '], [' I '], [' F '], [' G '], [' H '], [' I ']]

То, что я хотел бы, это: ADG, ADH, ADI, AEG, AEH, AEI, AFG, AFH, AFI, BDG ...

Я был бы очень признателен за любую помощь, которую вы можете принести. Большое спасибо, что нашли время, чтобы прочитать это!

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Нет причин использовать pop здесь. pop на самом деле разрушительно, так как после ['a', 'b', 'c'].pop(), 'c' больше не доступен для заполнения любых других списков.

Вместо этого вам нужно просто выполнить итерацию по каждому списку. На самом деле я собираюсь сделать эти строки сейчас, просто потому, что это устраняет некоторую сложность, и неясно, каким должен быть ваш фактический результат, если они не таковы, но об этом довольно легко рассуждать.

as, bs, cs = 'abc', 'def', 'ghi'

possible = []

for a in as:
    for b in bs:
        for c in cs:
            possible.append([a, b, c])

assert possible == [['a', 'd', 'g'], ['a', 'd', 'h'], ['a', 'd', 'i'], ['a', 'e', 'g'], ...]

Также стоит отметить, что такого рода «цепочка» для цикла является достаточно распространенным приложением, которое реализовано в стандартной библиотеке как itertools.product.

import itertools
# assume as, bs, cs, and possible are defined as above

for a, b, c in itertools.product(as, bs, cs):
    possible.append([a, b, c])

Действительно, этот вид «итерации поСбор и построение нового списка из него "достаточно распространено, и поэтому списочное понимание является концепцией не только в Python, но и во многих других языках. В Python синтаксис выглядит так:

import itertools
# as, bs, and cs are defined as above

possible = [[a, b, c] for a, b, c in itertools.product(as, bs, cs)]
0 голосов
/ 06 октября 2019

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

first=["A","B","C"]
second=["D","E","F"]
third=["G","H","I"]


for letter1 in first:
    word = ""
    word += letter1
    for letter2 in second: 
        word = word[:1] + letter2
        for letter3 in third: 
            word = word[:2] + letter3 
            print(word)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...