Как напечатать три списка в строках с 3 столбцами без запятых - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть три списка Python

ListA
ListB
ListC

Все списки имеют одинаковое количество элементов.

Я хочу напечатать их в следующей форме:

a0, b0, c0,

a1, b1, c1,

.
.
.

an, bn, cn

так что между элементами и после каждой строки, кроме последней, стоит запятая.

Ответы [ 5 ]

1 голос
/ 07 ноября 2019

Вы можете сжать его в элементы строки, а затем использовать '%' для форматирования вывода строки. Самым простым способом, который я могу придумать, является сброс последней запятой и ее перевод в новую строку, чтобы прочитать вывод в положение -2. Кроме того, это не будет ошибкой, если списки имеют нулевую длину (работает в крайнем случае).

Источник:

ListA = ['a0','a1','a2']
ListB = ['b0','b1','b2']
ListC = ['c0','c1','c2']

output = ""

for row in zip(ListA, ListB, ListC):
    output += "%s, %s, %s,\n" % row

output = output[:-2]
print(output)

Вывод:

a0, b0, c0,
a1, b1, c1,
a2, b2, c2
1 голос
/ 07 ноября 2019

Решение:

Вы можете сделать это, используя zip и два разных объединения:

',\n'.join([', '.join(items) for items in zip(a, b, c)])

или, как предложено rafaelc:

',\n'.join(map(', '.join, zip(a, b, c)))

Объяснение:

zip

zip группирует элементы различных итераций, которые вы предоставляете, по позиции.

zip(['a0', 'a1', 'a2', ...], ['b0', 'ba1', 'b2', ...], ['c0', 'c1', 'c2', ...])

возвращает:

('a0', 'b0', 'c0'), ('a1', 'b1', 'c1'), ('a2', 'b2', 'c2'), ...

Зависит от вашей версии Python, он может возвращать его как список или как генератор, но оба они итерируемы, поэтому проблем не должно быть.

map

map применяет функциюпередается в качестве первых аргументов каждому элементу итерируемого, передается в качестве второго аргумента и возвращает результирующее итерируемое.

Таким образом, оно будет применяться ', '.join к ('a0', 'b0', 'c0'), затем оно будет применяться ', '.join к ('a1', 'b1', 'c1'),...

', '.join(('a0', 'b0', 'c0')), ', '.join(('a1', 'b1', 'c1')), ', '.join(('a2', 'b2', 'c2')), ...

и с другим объединением у нас будет:

',\n'.join(   ', '.join(('a0', 'b0', 'c0')), ', '.join(('a1', 'b1', 'c1')), ', '.join(('a2', 'b2', 'c2')), ...   )

Понимание списка

Понимание списка - это то, что используется в первом решении вместокарты, применяя ',' .join к каждому элементу итерируемого.

[', '.join(item) for item in zip(a, b, c)]

эквивалентно:

map(', '.join, zip(a, b, c))

за исключением того, что понимание списка возвращает список, а вызов map возвращает итерацию, но это не имеет никакого значения, так как внешнее соединение принимает итерации, а списки также являются итерациями.

join

join создает строку, объединяющую элементы итерируемого, переданного в качестве аргумента, используя в качестве разделителя строку, из которой она была вызвана.

"-".join(['Hello', 'World'])

возвращает:

'Hello-World'

Применение внутренних объединений:

',\n'.join( [ 'a0, b0, c0', 'a1, b1, c1', 'a2, b2, c2', ... ] )

И применение внешнего

'a0, b0, c0,\na1, b1, c1,\na2, b2, c2,\n...'

Некоторые комментарии:

Они могут быть только частью упрощения проблемыВы сделали это здесь:

  • Не используйте имена PascalCase для переменных, используйте snake_case.
  • Старайтесь избегать использования переменной, определяющей тип переменной.
0 голосов
/ 07 ноября 2019

Простейший:

listA =[1,2,3,4,5,6,7]
listB =[11,2,3,4,5,6,7]
listC =[111,2,3,4,5,6,7]
length = len(listA) 
i = 0

# Iterating using while loop 
while i < length: 
    if (i<length-1):
        print(str(listA[i]) + ','+ str(listB[i])+ ','+ str(listC[i])+",")
    else:
         print(str(listA[i]) + ','+ str(listB[i])+ ','+ str(listC[i]))
    i += 1
0 голосов
/ 07 ноября 2019
la = [1,2,3]
lb = [4,5,6]
lc = [7,8,9]

# zip the three lists
ls = zip(la, lb, lc)

#loop through the iterator
for i, v in enumerate(ls):
    # convert to string and replace the left curved bracket
    v = str(v).replace("(", "")

    if (len(la) - i) == 1:
        print(v.replace(")", ""))
        continue
    # replace the right curved bracket with ',' if it's not the last
    print(v.replace(")", ","))

выход

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

Учитывая, что все элементы имеют одинаковую длину, вы можете просто установить ее за один цикл в цикле for для range(len()) любого списка:

ListA = ['a0','a1','a2']
ListB = ['b0','b1','b2']
ListC = ['c0','c1','c2']


for i in range(len(ListA)):
    if i < (len(ListA)-1):
        print(ListA[i]+", "+ListB[i]+", "+ListC[i]+",")
    else:
        print(ListA[i]+", "+ListB[i]+", "+ListC[i])

Вывод:

a0, b0, c0,
a1, b1, c1,
a2, b2, c2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...