2014-11-27 2 views
1

У меня есть проблема:Добавление пробелов в элементах списка (PY)

У меня есть список, который состоит из элементов различных длин: det_slopes_JKH = ['Superpipe Bolgen','JatzPark','Avalanch Training Center','Bräma schwer']

и я хотел бы добавить пространства ' ' к короче слов, с целью иметь все элементы списка с одинаковой длиной.

det_slopes_JKH2 = [] 
for element in det_slopes_JKH: 
    if len(element) < len(element[2]: 
     det_slopes_JKH2.append(element + ' ') 

Благодаря

+0

Место, где вы хотите добавить свободные пространства. –

+0

Например, len ('jatzpark') равно 8, а len ('Avalanch Training Center') - 24. Результат, который я хотел бы получить, - len ('jatzpark .. ..') = 24 (dors должно быть пустым пробелы) – BioShock

+0

@FedericoP. может у показать ожидаемый выход – Hackaholic

ответ

3

Ваша цель не очень ясна, но я предполагаю, что вы хотите иметь все строки одинаковой длины.

Это добавляет пространство для каждой строки, пока все имеют одинаковую длину (длина самой длинной строки):

def equalize_lengths(l): 
    length = len(max(l, key=len)) 
    return [e.ljust(length) for e in l] 
+1

Мне кажется, что я не могу запомнить все строковые методы ...поэтому мой ответ, очень похожий на ваш, использует форматирование. Твой лучше. Дополнительные пункты для инкапсуляции материала в функцию. – gboffi

0

Это должно сделать трюк:

det_slopes_JKH = ['Superpipe Bolgen','JatzPark','Avalanch Training Center','Bräma schwer'] 
max_length = max(len(elem) for elem in det_slopes_JKH) 
det_slopes_JKH2 = [elem + ' '*(max_length - len(elem)) for elem in det_slopes_JKH] 
print(det_slopes_JKH2) 

Результат является:

['Superpipe Bolgen  ', 'JatzPark    ', 'Avalanch Training Center', 'Bräma schwer   '] 
0

Использование встроенной max с key=len это даст вам максимальную строку длины используйте len чтобы получить длину, а затем использовать string formatting.

>>> max(det_slopes_JKH, key=len) 
'Avalanch Training Center' 
>>> len(max(det_slopes_JKH, key=len) 
24 
>>> ['{:24}'.format(elem) for elem in det_slopes_JKH] 
['Superpipe Bolgen  ', 'JatzPark    ', 'Avalanch Training Center', 'Br\xc3\xa4ma schwer   '] 
>>> 
0
[x.ljust(len(max(det_slopes_JKH,key=len))) for x in det_slopes_JKH ] 

Вы можете попробовать это один лайнер.

+0

'-len (x)' не требуется: аргумент ljust является конечной длиной строки, а не суммой. –

+0

@DomenicoDeFelice thanx для указания. Изменил – vks

1

Вам нужно две вещи:

  1. длина самой большой строки, используя max = len(max(det_slopes_JKH, key=len))
  2. Прилагайте пробелы до тех пор, пока длина не будет равна длине самой большой строки. Это можно сделать, используя ljust() как i.ljust(max). ljust продолжает добавлять пробелы справа от строки до строка длина = max.

Это можно сделать, используя список понимание, как:

>>> det_slopes_JKH = ['Superpipe Bolgen','JatzPark','Avalanch Training Center','Bräma schwer'] 
>>> [i.ljust(len(max(det_slopes_JKH, key=len))) for i in det_slopes_JKH] 
['Superpipe Bolgen  ', 'JatzPark    ', 'Avalanch Training Center', 'Bräma schwer   '] 
0

Я не видел строки форматирования в других ответов, и я, случается, нравится форматирование, что сказал, я не мог удержаться, чтобы показать мой 0.02 answer

maxlen = max(len(elt) for elt in places) 
fmt = "%-"+str(maxlen)+"s" 
places = [fmt%elt for elt in places] 
Смежные вопросы