我在\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]
但是,如果我想要的元素是非连续的,我怎么能这样做呢?
答案 0 :(得分:6)
您可以在Python中使用this,它返回所选项目的元组:
from operator import itemgetter
start, end, name, length, id = itemgetter(0,2,3,4,11)(parts)
当然还有其他方法,但这些可能不是一种显而易见的方式。
使用列表理解。这会构建一个列表,这可能不需要:
indices = 0,2,3,4,11
start, end, name, length, id = [parts[i] for i in indices]
将map
与list.__getitem__
一起使用。这也在Python 2中构建了一个列表,更多的是,通过魔术方法做某些事情有时令人感到毛骨悚然:
indices = 0,2,3,4,11
start, end, name, length, id = map(parts.__getitem__, indices)
还有 numpy 有一个operator.itemgetter
,但是你应该只使用这个,如果你之后要用数组做代数,你必须要安装 numpy :
import numpy as np
indices = 0,2,3,4,11
start, end, name, length, id = np.array(parts)[indices]