Python - 切片列表

时间:2012-02-28 06:52:44

标签: python list slice

我认为它叫做切片......

基本上我有一个列表清单:

[['fmt/10', 3L, 5L, Decimal('9500')], 
['fmt/353', 1L, 1L, Decimal('500')], 
['fmt/7', 3L, 5L, Decimal('9500')], 
['fmt/8', 3L, 5L, Decimal('9500')], 
['fmt/9', 3L, 5L, Decimal('9500')]]

我希望在位置[0],[1],[2]和[3]中提取4个新列表。

所以如果看起来像:

A = ['fmt/10', 'fmt/353','fmt/7','fmt/8','fmt/9']
B = [3,1,3,3,3] 
C = [5,1,5,5,5]
D = [9500,500,9500,9500,9500]

最简单的方法是什么? 从阅读中我想我想使用'zip',但我不确定它是如何工作的。

2 个答案:

答案 0 :(得分:11)

L = [['fmt/10', 3L, 5L, Decimal('9500')], 
     ['fmt/353', 1L, 1L, Decimal('500')], 
     ['fmt/7', 3L, 5L, Decimal('9500')], 
     ['fmt/8', 3L, 5L, Decimal('9500')], 
     ['fmt/9', 3L, 5L, Decimal('9500')]]

zip(*L)(用于解压缩列表的星号)将给出:

[('fmt/10', 'fmt/353', 'fmt/7', 'fmt/8', 'fmt/9'),
 (3L, 1L, 3L, 3L, 3L),
 (5L, 1L, 5L, 5L, 5L),
 (Decimal('9500'), Decimal('500'), Decimal('9500'), Decimal('9500'), Decimal('9500'))]

您可以使用解构分配:

A, B, C, D = zip(*L)

答案 1 :(得分:1)

A, B, C, D = apply(zip, [['fmt/10', 3L, 5L, Decimal('9500')], 
                         ['fmt/353', 1L, 1L, Decimal('500')], 
                         ['fmt/7', 3L, 5L, Decimal('9500')], 
                         ['fmt/8', 3L, 5L, Decimal('9500')], 
                         ['fmt/9', 3L, 5L, Decimal('9500')]])