如何更改列表中元素的位置

时间:2018-11-01 13:05:20

标签: python string python-3.x list

我有一个置换矩阵,它是一个方矩阵,元素为1或0。

p = [[1, 0, 0, 0],
     [0, 0, 1, 0],
     [0, 1, 0, 0],
     [0, 0, 0, 1]]

如果我将p乘以int的列表,则列表中元素的位置将被更改。例如

a_num = [1, 3, 2, 4]
np.dot(np.array(p), np.array(a_num).reshape(4,1))
# results is [1, 2, 3, 4]

现在我要更改str的列表:

a_str = ['c1', 'c3', 'c2', 'c4']

['c1', 'c2', 'c3', 'c4']

您知道如何使用矩阵p来实现吗?请注意,我的实际应用程序可以在列表中包含数十个元素。

供您参考。有一篇关于 How to generate permutation matrix based on two lists of str

2 个答案:

答案 0 :(得分:2)

您可以使用 +-------+-------------+-------------+-----------+ 1 | Company | Invoice # | Employee | Hours | +=======+============+============+============+ 2 | A | 12345 | Employee 1 | 10 | 3 | A | 12345 | Employee 2 | 2 | 4 | A | 23456 | Employee 1 | 8 | 5 | A | 23456 | Employee 2 | 3 |

numpy.take

答案 1 :(得分:1)

通过利用列表理解中的枚举,您可以不使用numpy来实现:

p = [[1, 0, 0, 0],
     [0, 0, 1, 0],
     [0, 1, 0, 0],
     [0, 0, 0, 1]]

a_str = ['c1', 'c3', 'c2', 'c4']

b_str = [a_str[idx] for row in p for idx,i in enumerate(row) if i == 1]

print(b_str)

输出:

 ['c1', 'c2', 'c3', 'c4']

它获取p的每个内部列表,并在该内部列表的a_str处使用idx的元素,即一个,从而创建一个新列表。