Список слов и букв к списку букв - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть список, в котором есть строки длиной 1 до n:

a = ['a','aq','thw','z']

Я пытаюсь получить плоский список только с элементами длины 1, расширяя тедлина которого превышает 1.Мое текущее решение:

l = []
for i in a:
    l = l + list(i)
print(l)
['a', 'a', 'q', 't', 'h', 'w', 'z']

Есть ли более прямой способ избежать этой петли for?

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

Ответы [ 2 ]

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

Это самый простой способ сделать это, используя str.join + listification.

>>> list(''.join(a))
['a', 'a', 'q', 't', 'h', 'w', 'z']

Существует также решение с chain:

>>> from itertools import chain
>>> list(chain.from_iterable(a)) # Thanks, @Patrick Haugh!
['a', 'a', 'q', 't', 'h', 'w', 'z']

Они все довольно быстрые.

a2 = a * 100000
%timeit list(''.join(a2))
%timeit list(chain.from_iterable(a2))
%timeit [letter for word in a2 for letter in word]

11.1 ms ± 247 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
32.3 ms ± 863 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
50.2 ms ± 1.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
0 голосов
/ 14 декабря 2018

Использовать понимание списка:

>>> [letter for word in a for letter in word]
['a', 'a', 'q', 't', 'h', 'w', 'z']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...