#python
#python
Вопрос:
Я хочу распечатать данные из списка, такие как:
['0.10', '0.15', '-0.25', '0.30', '1.50', '1.70']
Однако вместо печати одного элемента в списке с использованием чего-то вроде:
for item in list:
print item
Я хочу напечатать произвольное количество элементов из списка в каждой строке. Я могу придумать много запутанных способов сделать это, и я видел ответ, в котором использовался рецепт grouper со страницы itertools в документах. Я рад использовать это, но я подозреваю, что может быть лучший способ сделать это.
Пример вывода, который мне мог бы понравиться, был бы:
0.10 0.15 -0.25
0.30 1.50 1.70
Или:
0.10 0.15 -0.25 0.30
1.50 1.70
Таким образом, количество элементов в каждой строке не обязательно является фактором количества элементов в списке. Некоторые строки могут заканчиваться меньшим количеством элементов, если список слишком короткий.
Комментарии:
1. Что не так с рецептом grouper? Вероятно, это лучшее, что вы можете получить.
2. Я не думал, что в этом было что-то не так, я просто не очень хорошо разбираюсь в идиомах Python, и мне было интересно, знает ли кто-нибудь быстрый способ.
3. Единственное, что мне не нравится в grouper receipte (и нескольких других), это то, что это рецепт, а не функция. На какой планете копирование и вставка лучше импорта?
Ответ №1:
Это работает. Это кажется довольно простым.
for i in range(0, len(some_list), line_length):
print( some_list[i:i line_length] )
Если вы хотите буквальное форматирование, показанное в вопросе, вам нужно будет сделать что-то вроде этого.
for i in range(0, len(some_list), line_length):
print( " ".join( "{0:.2f}".format(x) for x in some_list[i:i line_length] ) )
Ответ №2:
Еще одна (возможно) более простая версия:
mylist = ['0.10', '0.15', '-0.25', '0.30', '1.50', '1.70']
line_items = 3
for n, item in enumerate(mylist):
if (n 1) % line_items:
print item,
else:
print item
выдает:
0.10 0.15 -0.25
0.30 1.50 1.70
Ответ №3:
Думаю, это решение немного более понятно:
a = ['0.10', '0.15', '-0.25', '0.30', '1.50', '1.70']
body = []
length = 2
for b in xrange(len(a)):
body.append(str(a[b]))
if b % length:
body.append("n")
else:
body.append("t")
print "".join(body)
Надеюсь, это поможет 🙂
PS: И на самом деле решение только для одной печати может быть полезно в списках, содержащих много переменных.