2015-12-04 5 views
0

Я некоторое время боролся с этим. У меня есть список с подписок, и я хотел добавить элемент, который является пространством перед каждым элементом подписок. например:Добавить пробелы в элементы списка

lin = [[2], [3], [2], [2, 2], [2]] 

результат должен быть:

lin = [[' ',2], [' ',3], [' ',2], [' ',2, ' ',2], [' ',2]] 

Я пытался сделать это:

for a in lin: 
    for e in a: 
     e = (' ') , e 

, но я получил точно такой же список без изменений

+0

Вы имеете в виду 'lin = [['', 2], ['', 3], ['', 2], ['', 2, '', 2], ['', 2]] '? – TigerhawkT3

+0

да именно это – marga

ответ

2

Я предполагаю, что вы на самом деле означали что-то вроде комментария Тигрхока.

Ваша проблема в том, что e= (' ') , e просто переписывает значение e (которое первоначально было изначально указано в вашем вложенном списке) в кортеж, содержащий пробел и исходное значение. Это фактически ничего не меняет внутри вашего списка, просто меняет то, что изначально указывало e.

Вместо этого вы можете сделать что-то вроде этого:

>>> lin = [[2], [3], [2], [2, 2], [2]] 
>>> for a in lin: 
     for i in range(len(a)-1,-1,-1): 
      a.insert(i, ' ') 


>>> lin 
[[' ', 2], [' ', 3], [' ', 2], [' ', 2, ' ', 2], [' ', 2]] 

Примечания внутреннего цикла: for i in range(len(a)-1,-1,-1): Это делается таким образом, из-за 2 причин:

  1. вы не хотите быть на самом деле пробегаем по a так как вы собираетесь изменить значения в a
  2. Вам нужно начать с самого высокого индекса, потому что если вы начинаете с 0, индексы остальных элементов ах его действие изменится.
+1

Упс, не заметил элемент '[2, 2]' там. Хорошая работа * Желудок Whisperer * –

+1

Uh oh. Имя торчит. –

+0

Большое вам спасибо за помощь и за объяснение! да, я хотел сказать, что сказал Тигерхоук. Еще раз спасибо, я очень ценю это. – marga

2

Вы можете использовать список понимание и chain.from_iterable от itertools

>>> from itertools import chain 
>>> lin = [[2], [3], [2], [2, 2], [2]] 
>>> [list(chain.from_iterable([(' ', i) for i in j])) for j in lin] 
[[' ', 2], [' ', 3], [' ', 2], [' ', 2, ' ', 2], [' ', 2]] 
>>> 
0

Аккуратный, функциональное решение, которое использует только встроенные функции

lin = [[2], [3], [2], [2, 2], [2]] 

add_spaces = lambda l: [i for x in zip(' '*len(l), l) for i in x] 
new_list = [add_spaces(l) for l in lin] 

Выход:

>>> print new_list 
[[' ', 2], [' ', 3], [' ', 2], [' ', 2, ' ', 2], [' ', 2]] 
+1

moar функции! 'lambda l: list (itertools.chain.from_iterable (zip (itertools.repeat (''), l)))' –

+1

@AdamSmith - это, хороший сэр, является произведением искусства. – Boa

+0

(и я очень рад, что он сработал, так как я взбивал его вместе, не запуская его в моем представлении первым ...) –

Смежные вопросы