将非顺序列表元素分配给变量

时间:2017-06-30 11:44:55

标签: python

我在\t分割文件的一行并将每个部分保存在名为parts的列表中:

with open(in_file, 'r') as file:
    for l in file:
        parts = l.rstrip().split('\t')
然后我想把一些元素分配给变量。

在Perl中我会这样做:

my @parts = split(/\t/);    
my ($start, $end, $name, $length, $id) = @parts[0,2,3,4,11];

我如何在Python中实现这一目标?我想做一些相当于:

的事情
start, end, name, length, id = parts[0,2,3,4,11]  # Doesn't work

相反:

start = parts[0]
end = parts[2]
...

我知道我可以像这样分配一系列元素:

start, other_var, end = parts[0:3]

但是,如果我想要的元素是非连续的,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:6)

您可以在Python中使用this,它返回所选项目的元组:

from operator import itemgetter

start, end, name, length, id = itemgetter(0,2,3,4,11)(parts) 

当然还有其他方法,但这些可能不是一种显而易见的方式

  1. 使用列表理解。这会构建一个列表,这可能不需要:

    indices = 0,2,3,4,11
    start, end, name, length, id = [parts[i] for i in indices]
    
    1. maplist.__getitem__一起使用。这也在Python 2中构建了一个列表,更多的是,通过魔术方法做某些事情有时令人感到毛骨悚然:

      indices = 0,2,3,4,11
      start, end, name, length, id = map(parts.__getitem__, indices)
      
      1. 还有 numpy 有一个operator.itemgetter,但是你应该只使用这个,如果你之后要用数组做代数,你必须要安装 numpy

        import numpy as np
        
        indices = 0,2,3,4,11
        start, end, name, length, id = np.array(parts)[indices]