Как отобразить строки массива с определенным интервалом и текстом?

Скажи мне,

a = np.array([2, 4, 6, 8])
b = np.array([100, 400, 600, 800])

Желаемый вывод при печати:

Position    Magnitude
2 m         100 kg
4 m         400 kg     
6 m         600 kg    
8 m         800 kg

Я пробовал что-то подобное, но не показывает, что я хочу

print("\n "+ ' '.join(map(str, a)))  

Итак, как можно видеть, я хочу, чтобы единицы 'm' и 'kg' шли сразу после каждого элемента в списке a и b. Списки содержат только цифры.

0
vectorizinglife 23 Июн 2019 в 19:13

5 ответов

Лучший ответ

format() дает вам целый мини-язык для укладки из рядов. Вот простой вариант использования для столбцов с фиксированным значением:

a = np.array([2, 4, 6, 8])
b = np.array([100, 400, 600, 800])

print('{} {:>14}'.format('Position','Magnitude'))
for m, kg in zip(a,b):
    print('{} m{:>14} kg'.format(m, kg))

< Сильный > печатает

Position      Magnitude
2 m           100 kg
4 m           400 kg
6 m           600 kg
8 m           800 kg
0
Mark Meyer 24 Июн 2019 в 07:27

Делая это, вы получите запрошенный вывод. zip просто итерируйте два для циклов одновременно. В этом случае a1 будет перебирать вектор, а b1 перебирать вектор b.

a = np.array([2, 4, 6, 8])
b = np.array([100, 400, 600, 800])
print('Position\t Magnitude')
for a1, b1 in zip(a,b):
    print(a1,'m\t\t',b1,'kg')
0
mao95 23 Июн 2019 в 16:22

Если вы имеете дело с pandas (вывод без # ...):

import numpy as np
import pandas as pd

a = np.array([2, 4, 6, 8])
b = np.array([100, 400, 600, 800])


df = pd.DataFrame({"Position": [str(pos) + " m" for pos in a],
                    "Magnitude": [str(mag) + " kg" for mag in b]})


print(df.to_string(index=False))
# Position Magnitude
#      2 m    100 kg
#      4 m    400 kg
#      6 m    600 kg
#      8 m    800 kg
1
Alexandre B. 23 Июн 2019 в 16:31

Вы можете просто выполнить итерацию по двум спискам одновременно, используя zip и распечатать элементы .

Я использовал вкладки \t для создания необходимого интервала, но можно использовать комбинацию пробелов и вкладок вместе с другими параметрами форматирования для улучшения форматирования

print('Position\tMagnitude')

#Iterate over the arrays simultaneously
for pos, mag in zip(a,b):

    #Print the elements
    print(f'{pos} m\t\t\t{mag} kg')

Выход будет

Position    Magnitude
2 m         100 kg
4 m         400 kg
6 m         600 kg
8 m         800 kg
0
Devesh Kumar Singh 23 Июн 2019 в 16:21

Если вы хотите использовать операции над этим дальше, а не просто печать, лучше использовать модуль pandas:

import pandas as pd

df = pd.DataFrame(list(zip(a, b)), colums=['Position', 'Magnitude'])

df['Position'] = df['Position'].astype(str) + ' m'
df['Magnitude'] = df['Magnitude'].astype(str) + ' kg'

print(df)
0
Austin 23 Июн 2019 в 16:36