Преобразование кортежей в списки и избавление от внутреннего кортежа / списка - PullRequest
0 голосов
/ 15 ноября 2011

Вот мой кортеж из кортежей:

(('dlazarov',), ('ant1',))

Я хотел бы превратить это в это:

['dlazarov', 'ant1']

Я пытался использовать это:

userdata = (('dlazarov',), ('ant1',))

userdata = map(list, userdata)
userdata = sum(userdata, [])

Но, похоже, это не сработает.

Не важно, у меня была опечатка в конце.

Также - вопрос, если вы, ребята, хотите на него ответить - где лучший путь?чтобы улучшить знания со списками, itertools и т. д. Я продолжаю использовать неэффективные обходные пути, которые я хорошо знаю, но которые определенно неэффективны и занимают много времени.Черт, половину времени мне приходится использовать строки и разбиение, чтобы превратить вещи в список.

Ответы [ 4 ]

2 голосов
/ 15 ноября 2011

Операция называется «выравнивание».

Вы можете использовать itertools.chain.from_iterable для обработки общего случая выравнивания итерируемых итераций (в вашем случае, кортежкортежи):

>>> from itertools import chain
>>> tot = (('dlazarov',), ('ant1',))
>>> list(chain.from_iterable(tot))
['dlazarov', 'ant1']
2 голосов
/ 15 ноября 2011

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

>>> userdata = (('dlazarov',), ('ant1',))
>>> [x[0] for x in userdata]
['dlazarov', 'ant1']
1 голос
/ 15 ноября 2011

Ваш путь, кажется, работает, но вот альтернативный подход:

from itertools import chain

list(chain(*userdata))

Это один из рецептов здесь: http://docs.python.org/library/itertools.html#recipes

0 голосов
/ 15 ноября 2011

И, конечно, есть итеративный способ:

mytuple = (('dlazarov',), ('ant1',))

mylist = []
for t in mytuple:
    mylist.append(t[0])
...