können Sie verwenden, um die Logik von der grouper recipe:
listA=['a','b','c','d','e','f','g','h','i','j']
print("\n".join(map(" ".join, zip(*[iter(listA)] * 3))))
a b c
d e f
g h i
Wenn Sie nicht wollen, Elemente izip_longest
mit einem leeren String als fillvalue verwenden verlieren:
listA=['a','b','c','d','e','f','g','h','i','j']
from itertools import izip_longest
print("\n".join(map(" ".join, izip_longest(*[iter(listA)] * 3,fillvalue=""))))
Welche dadurch unterscheidet, dass es den j hält:
a b c
d e f
g h i
j
Sie können Setzen Sie die Logik in eine Funktion und rufen Sie sie auf, wenn Sie drucken möchten. Geben Sie die gewünschten Werte ein.
from itertools import izip_longest
def print_matrix(m,n, fill):
print("\n".join(map(" ".join, izip_longest(*[iter(m)] * n, fillvalue=fill))))
Oder ohne itertools nur Brocken und kommen, können Sie auch eine sep
arg nehmen als Trennzeichen zu verwenden:
def print_matrix(m,n, sep):
print("\n".join(map("{}".format(sep).join, (m[i:i+n] for i in range(0, len(m), n)))))
Sie müssen nur für jede Zeile die Liste und die Größe zu übergeben:
In [13]: print_matrix(listA, 3, " ")
a b c
d e f
g h i
j
In [14]: print_matrix(listA, 3, ",")
a,b,c
d,e,f
g,h,i
j
In [15]: print_matrix(listA, 4, ",")
a,b,c,d
e,f,g,h
i,j
In [16]: print_matrix(listA, 4, ";")
a;b;c;d
e;f;g;h
i;j
Erstaunlich, dass es bestimmte "Rezepte" (wie Padraic zeigt), aber ich denke, Ihr Weg ist viel besser - weil ** Ihr Code ist einfach und seine Wirkung offensichtlich ** sogar ein Python-Neuling (dh ohne Kenntnis von (seltenen?) Importen). – KlaymenDK
Dies könnte auch neu geschrieben werden, indem die Druckfunktion als 'für i, v in enumerate ('abcdefghij', 1) verwendet wird: print (v, end = '' wenn i% 3 else '\ n') '. – arekolek
Sie könnten auch 'start = 1 'vermeiden und' '\ n' verwenden, wenn i% 3 == 2 else '' oder '' 'wenn i% 3 <2 else' \ n''. – Bakuriu