2013-11-26 2 views
0

У меня есть список списков в python, который я использую для записи данных входного файла для исполняемого файла командной строки. Исполняемый файл имеет ограничения на длину НЕКОТОРЫХ входных строк, но не всех. Есть ли способ, чтобы изменить размер всех элементов в определенном положении в моем «массив», что:элементы переразмера в списке на основе индекса

1, test, 12, toronto 
2, test, 145, montreal 
3, test, 178, north bay 

стал бы:

1, test, 12, to 
2, test, 145, mo 
3, test, 178, no 

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

for x in list: 
    x[3] = x[3][:5] #where 5 is the length 
+1

Во-первых, спокойной ночи здесь. :) Во-вторых, что на самом деле ваша проблема? Что вы подразумеваете под «* обработкой массива while за один раз»? – aIKid

+3

Аккуратно это «хороший день» :) –

ответ

1
a = [ [1, 'test', 12, 'toronto'], [2, 'test', 145, 'montreal'] ] 
a = [ [e [:5] if i == 3 else e for i, e in enumerate (line)] for line in a] 
print (a) 

Будучи i положение вы хотите сократить, если это различные колонны, использовать что-то вроде i in (3, 5).

Или если у вас есть различные длины для различных колонок, вы можете использовать что-то вроде этого:

a = [[1, 'test', 12, 'toronto'], [2, 'test', 145, 'montreal']] 
shorten = {1: 2, 3: 4} #shorten column 1 to length 2, and col 3 to len 4 
a = [[e[:shorten[i]] if i in shorten else e for i, e in enumerate(line)] for line in a] 
print (a) 
+0

Это прекрасно. Добавочная способность делать «i = (0 или 2 или 10)» особенно полезна. – HHains

+1

'i = (0 или 2 или 10)' совпадает с 'i = 2' и не будет работать должным образом. Вы ищете 'i in (0, 2, 10)'. – Hyperboreus

0
my_list = [[1, 'test', 12, 'toronto'], 
      [2, 'test', 145, 'montreal'], 
      [3, 'test', 178, 'north bay']] 

print map(lambda x: x[:2] + [x[3][:2]],[x for x in my_list]) 

выходы

[[1, 'test', 12, 'to'], [2, 'test', 145, 'mo'], [3, 'test', 178, 'no']] 
Смежные вопросы