基于索引重新调整列表中的元素大小

时间:2013-11-26 14:42:03

标签: python

我在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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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']]