Понимание списка Python с двумя циклами - PullRequest
1 голос
/ 07 апреля 2019

Я новичок в Python.

Я изучаю понимание списка, но мой код плох, потому что понимание списка неверно или отсутствует:

Я пробовал много вещей, но результатыгенераторы или ошибки.Не могли бы вы дать мне совет ...?

Спасибо.Acer

import itertools as it
aT=list(it.permutations([4,3,3,0],3))
uT=list(set(aT))
# convert uniqueTimes list of tuples to list of lists
uT=[list(el) for el in uT]

uTt=[el[0]+el[1]+el[2] for el in uT] #It is wrong, I want universal list comprehension :-( when I change members of permutation, e.g.it.permutations([5,4,3,2,1],4))

uTs=[] #It is wrong too, I want universal list comprehension :-(
a=""
for m in range(len(uT)):
    for n in range(len(uT[m])):
        a+=str(uT[m][n])
    uTs.append(a)
    a=""

uTcombine=list(it.zip_longest(uTs,uTt)) #result as I expected, but the algorithm is "non comperhesion"

print(uT)
print(uTcombine)

из этого (uT - список списков, каждый внутренний список которого уникален)

[[0, 3, 3], [3, 4, 3], [0, 3, 4], [3, 0, 3], [3, 4, 0], [3, 0, 4], [4, 0, 3], [4, 3, 3], [3,3, 4], [3, 3, 0], [0, 4, 3], [4, 3, 0]]

Мне нужно это (uTcombine - список кортежей, где первым в кортеже является[0,3,3] => '033', а секунда - сумма пунктов списка [0,3,3] => 6

[('033', 6), ('343', 10), («034», 7), («303», 6), («340», 7), («304», 7), («403», 7), («433», 10),(«334», 10), («330», 6), («043», 7), («430», 7)]

1 Ответ

0 голосов
/ 07 апреля 2019

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

uT = [(''.join(map(str, el)), sum(el)) for el in uT]

В этом случае:

''.join(map(str, el)) преобразует перестановку в требуемое строковое представление (0, 3, 3, ) -> '033', сначала покрывая каждый элемент строкой (используя map(str, el)), а затем соединяя строки.

sum(el) суммировал перестановку (0, 3, 3, ) -> 6

...