将一个列表解压到 python 中另一个列表的索引
Unpack a List in to Indices of another list in python
是否可以解压缩数字列表以列出索引?例如,我有一个列表,列表中包含这样的数字:
a = [[25,26,1,2,23], [15,16,11,12,10]]
我需要将它们放在一个模式中,所以我做了这样的事情
newA = []
for lst in a:
new_nums = [lst[4],lst[2],lst[3],lst[0],lst[1]]
newA.append(new_nums)
print (newA) # prints -->[[23, 1, 2, 25, 26], [10, 11, 12, 15, 16]]
所以我没有写 new_nums = [lst[4],lst[2],lst[3],lst[0],lst[1]]
,而是想将模式定义为名为 pattern = [4,2,3,0,1]
的列表,然后将它们解压缩到 lst
的索引中以创建 [= 的新顺序15=].
有什么好的方法吗
如果您不反对使用 numpy,请尝试以下操作:
import numpy as np
pattern = [4, 2, 3, 0, 1]
newA = [list(np.array(lst)[pattern]) for lst in a]
希望对您有所帮助。
给定一个名为 pattern
的索引列表,您可以像这样使用 列表理解:
new_lst = [[lst[i] for i in pattern] for lst in a]
在纯 Python 中,您可以使用列表理解:
pattern = [4,2,3,0,1]
newA = []
for lst in a:
new_nums = [lst[i] for i in pattern]
newA.append(new_nums)
在 numpy 中,您可以使用花哨的索引功能:
>>> [np.array(lst)[pattern].tolist() for lst in a]
[[23, 1, 2, 25, 26], [10, 11, 12, 15, 16]]
它比其他的慢,但它是另一种选择。您可以根据您的模式对列表进行排序
a = [[25,26,1,2,23], [15,16,11,12,10]]
pattern = [4,2,3,0,1]
[sorted(line,key=lambda x:pattern.index(line.index(x))) for line in a]
[[23, 1, 2, 25, 26], [10, 11, 12, 15, 16]]
operator.itemgetter
提供了一个有用的映射函数:
from operator import itemgetter
a = [[25,26,1,2,23], [15,16,11,12,10]]
f = itemgetter(4,2,3,0,1)
print [f(x) for x in a]
[(23, 1, 2, 25, 26), (10, 11, 12, 15, 16)]
如果您想要列表列表而不是元组列表,请使用 list(f(x))
。
是否可以解压缩数字列表以列出索引?例如,我有一个列表,列表中包含这样的数字:
a = [[25,26,1,2,23], [15,16,11,12,10]]
我需要将它们放在一个模式中,所以我做了这样的事情
newA = []
for lst in a:
new_nums = [lst[4],lst[2],lst[3],lst[0],lst[1]]
newA.append(new_nums)
print (newA) # prints -->[[23, 1, 2, 25, 26], [10, 11, 12, 15, 16]]
所以我没有写 new_nums = [lst[4],lst[2],lst[3],lst[0],lst[1]]
,而是想将模式定义为名为 pattern = [4,2,3,0,1]
的列表,然后将它们解压缩到 lst
的索引中以创建 [= 的新顺序15=].
有什么好的方法吗
如果您不反对使用 numpy,请尝试以下操作:
import numpy as np
pattern = [4, 2, 3, 0, 1]
newA = [list(np.array(lst)[pattern]) for lst in a]
希望对您有所帮助。
给定一个名为 pattern
的索引列表,您可以像这样使用 列表理解:
new_lst = [[lst[i] for i in pattern] for lst in a]
在纯 Python 中,您可以使用列表理解:
pattern = [4,2,3,0,1]
newA = []
for lst in a:
new_nums = [lst[i] for i in pattern]
newA.append(new_nums)
在 numpy 中,您可以使用花哨的索引功能:
>>> [np.array(lst)[pattern].tolist() for lst in a]
[[23, 1, 2, 25, 26], [10, 11, 12, 15, 16]]
它比其他的慢,但它是另一种选择。您可以根据您的模式对列表进行排序
a = [[25,26,1,2,23], [15,16,11,12,10]]
pattern = [4,2,3,0,1]
[sorted(line,key=lambda x:pattern.index(line.index(x))) for line in a]
[[23, 1, 2, 25, 26], [10, 11, 12, 15, 16]]
operator.itemgetter
提供了一个有用的映射函数:
from operator import itemgetter
a = [[25,26,1,2,23], [15,16,11,12,10]]
f = itemgetter(4,2,3,0,1)
print [f(x) for x in a]
[(23, 1, 2, 25, 26), (10, 11, 12, 15, 16)]
如果您想要列表列表而不是元组列表,请使用 list(f(x))
。