Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 25, 2013 14:15:19

FanOfGun
Зарегистрирован: 2013-02-03
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

двумерный список в одномерный выражением-генератором

возможно? как? заранее благодарен

Офлайн

#2 Авг. 25, 2013 14:31:36

FanOfGun
Зарегистрирован: 2013-02-03
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

двумерный список в одномерный выражением-генератором

upd. можно не генератором, но в одну строку кода

Офлайн

#3 Авг. 25, 2013 14:37:59

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

двумерный список в одномерный выражением-генератором

Обсуждали несколько дней назад:

# работает
a = [[1,2,3],['a','b','c'],[dict(k=4)]]
sum(a,[])
# [1, 2, 3, 'a', 'b', 'c', {'k': 4}]
a = [[1,2,3],[4],[5,6,7]]
sum(a,[])
# [1, 2, 3, 4, 5, 6, 7]

# не работает
a = [[1,2,3],4,[5,6,7]]
sum(a,[])
# TypeError: can only concatenate 
# list (not "int") to list
a = [[1,2,3], (4,5)]
sum (a,[])
# TypeError: can only concatenate 
# list (not "tuple") to list



Бейсик - не порок, Гвидо - не пророк

Офлайн

#4 Авг. 26, 2013 11:35:45

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

двумерный список в одномерный выражением-генератором

import re
a = [ [1,2,3], ['a','b','cd'], 1, 2, 3]
print re.findall(r"\w+", str(a))



Офлайн

#5 Авг. 26, 2013 12:03:26

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

двумерный список в одномерный выражением-генератором

(item for sublist in lst for item in sublist)

Офлайн

#6 Авг. 26, 2013 12:53:20

FanOfGun
Зарегистрирован: 2013-02-03
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

двумерный список в одномерный выражением-генератором

wbt, спасибо, жаль это работает только для списков
FishHook, имхо сильно костыльно
bismigalis, спасибо, вот это наверно то, что я искал

Офлайн

#7 Авг. 26, 2013 13:46:13

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

двумерный список в одномерный выражением-генератором

хотя мне больше по душе такой вариант

from itertools import chain
chain(*lst)

Офлайн

#8 Авг. 26, 2013 21:51:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

двумерный список в одномерный выражением-генератором

>>> import itertools
>>> 
>>> lst = [[1, 2, 3], [4], [5, 6, 7]]
>>> list(itertools.chain.from_iterable(lst))
[1, 2, 3, 4, 5, 6, 7]
>>>



Отредактировано py.user.next (Авг. 26, 2013 21:53:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version