Как я объединяю 2D массив в Python в одну строку с Пониманием Списка?

решаемые. Я открываю файл myApp.dproj с помощью блокнота и появилась ссылка. Я удалил и теперь все работает нормально.

16
задан Sam McAfee 19 September 2008 в 17:21
поделиться

8 ответов

Как так:

[ item for innerlist in outerlist for item in innerlist ]

Превращение этого непосредственно в строку с разделителями:

','.join(str(item) for innerlist in outerlist for item in innerlist)

Да, порядок 'для innerlist в outerlist' и 'для объекта в innerlist' корректен. Даже при том, что "тело" цикла в начале listcomp, порядок вложенных циклов (и 'если' бы пункты) является все еще тем же как тогда, когда Вы выписали бы цикл:

for innerlist in outerlist:
    for item in innerlist:
        ...
28
ответ дан 30 November 2019 в 16:10
поделиться

Попробуйте это:

li=[[0,1,2],[3,4,5],[6,7,8]]
li2 = [ y for x in li for y in x]

можно считать его как это:
Дают мне список каждого ys.
ys прибывают из xs.
xs прибывают от li.

Для отображения этого в строке:

','.join(map(str,li2))
6
ответ дан 30 November 2019 в 16:10
поделиться

Существует пара выбора. Во-первых, можно просто создать новый список и добавить содержание каждого списка к нему:

li2 = []
for sublist in li:
    li2.extend(sublist)

Поочередно, можно использовать itertools модуль chain функция, которая производит повторяемое, содержащее все объекты в нескольких iterables:

import itertools
li2 = list(itertools.chain(*li))

, Если Вы проявляете этот подход, можно произвести строку, не создавая промежуточный список:

s = ",".join(itertools.chain(*li))
6
ответ дан 30 November 2019 в 16:10
поделиться

Мой фаворит и самый короткий, являются этим:

li2 = sum(li, [])

и

s = ','.join(li2)

РЕДАКТИРОВАНИЕ: используйте sum вместо reduce, (спасибо Thomas Wouters !)

4
ответ дан 30 November 2019 в 16:10
поделиться

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

  1. http://code.activestate.com/recipes/121294/
  2. http://code.activestate.com/recipes/363051/

Затем join для создания его строкой.

0
ответ дан 30 November 2019 в 16:10
поделиться

Для второго существует встроенный строковый метод, чтобы сделать это:

>>> print ','.join(str(x) for x in li2)
"0,1,2,3,4,5,6,7,8"

Для первого, можно использовать соединение в рамках списка понимания:

>>> print ",".join([",".join(str(x) for x in li])
"0,1,2,3,4,5,6,7,8"

, Но легче использовать itertools.flatten:

>>> import itertools
>>> print itertools.flatten(li)
[0,1,2,3,4,5,6,7,8]
>>> print ",".join(str(x) for x in itertools.flatten(li))
"0,1,2,3,4,5,6,7,8"

N.B: itertools является модулем, которые помогают Вам иметь дело с общими задачами с итераторами, такими как список, кортежи или строка... Это удобно, потому что это не хранит копию структуры, Вы продолжаете работать, но обрабатываете объекты один за другим.

РЕДАКТИРОВАНИЕ: забавный, я изучаю много способа сделать это. Кто сказал, что был только один хороший способ сделать это?

0
ответ дан 30 November 2019 в 16:10
поделиться

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

import numpy
li = [[0,1,2],[3,4,5],[6,7,8]]
li2=li[0] #first element of array to merge
i=1 
while i<len(li):
    li2=numpy.concatenate((li2,li[i]))
    i+=1
print li2

Это напечатало бы [0 1 2 3 4 5 6 7 8], а затем вы также можете преобразовать это в свою строку.

0
ответ дан 30 November 2019 в 16:10
поделиться
import itertools
itertools.flatten( li )
-1
ответ дан 30 November 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: