Форматирование строк двух сжатых массивов NumPy в Python 3 - PullRequest
0 голосов
/ 08 января 2019

Я хотел бы использовать функцию формата pythons для печати последующих чисел массива numpy.

У меня есть два массива, скажем так:

x=[1 2 3 4]
y=[5 6 7 8]

Теперь я хотел бы напечатать это:

1 5 2 6 3 7 4 8

Я могу почти достичь этого путем:

print('{} {} {} {}'.format(*zip(x,y)))

но это дает:

(1,5) (2,6) (3,7) (4,8)

Конечно, я мог бы использовать

"{} {} {} {}".format(x[0], y[0], x[1], y[1])

и т. Д., Но для этого необходимо знать длину массива.

Примечание: Эта строка кода делает то, что я хочу

print(*["%f %f"%(a,b) for a,b in zip(x,y)])

но при этом используется старый стиль форматирования, и я хотел бы знать, возможно ли и с новым. Это также выглядит немного странно, я думаю: -D

Ответы [ 7 ]

0 голосов
/ 08 января 2019

Так как вы используете numpy, как насчет

>>> ' '.join(np.vstack((x, y)).T.flatten().astype(str))
'1 5 2 6 3 7 4 8'
0 голосов
/ 09 января 2019

Вбрасывание другого в смесь

("{} "*len(x)*2).format(*np.ravel(list(zip(x,y))))

 '1 5 2 6 3 7 4 8 '
0 голосов
/ 08 января 2019

Это также возможно с itertools.starmap:

>>> print(*starmap("{} {}".format, zip(x, y)))
1 5 2 6 3 7 4 8

Обычно метод, заданный @yatu с itertools.chain, является подходящим способом, особенно если вы хотите, чтобы все элементы были разделены пробелами. Но starmap может пригодиться, если вы хотите иметь какое-то специальное форматирование между парами, например:

>>> print(*starmap("{}:{}".format, zip(x, y)))
1:5 2:6 3:7 4:8
0 голосов
/ 08 января 2019

как насчет numpy

np.array(list(zip(a,b))).flatten()

выход

array([1, 5, 2, 6, 3, 7, 4, 8])
0 голосов
/ 08 января 2019

Вы можете использовать zip() для итерации двух итераций одновременно.

l1 = [0, 2, 4, 6, 8]
l2 = [1, 3, 5, 7, 9]

for i, j in zip(l1, l2):
    print(i)
    print(j)

Выход:

0
1
2
3
4
5
6
7
8
9
0 голосов
/ 08 января 2019

Вы можете использовать itertools.chain для чередования элементов из обоих списков:

list(chain.from_iterable(zip(x, y)))
[1, 5, 2, 6, 3, 7, 4, 8]

И если вы хотите напечатать все элементы, соединенные так, как вы укажете, вы можете сделать:

print(*chain.from_iterable(zip(x, y)))
1 5 2 6 3 7 4 8
0 голосов
/ 08 января 2019

Выполните следующие действия:

x=[1, 2, 3, 4]
y=[5, 6, 7, 8]

result = ' '.join([str(i) for e in  zip(x, y) for i in e])
print(result)

выход

1 5 2 6 3 7 4 8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...