在python中反转列表中的元素

时间:2016-02-19 16:59:16

标签: python list numpy

我有一大堆前2个标签:

n =  [['20011' '20048']
     ['20011' '20048']
     ['20011' '20048']
     ['20011' '20048']]

我想以相反的顺序得到它们:

[['20048' '20011']
 ['20048' '20011']
 ['20048' '20011']]

如何在保持格式相同的情况下这样做?

代码到现在为止:

n = model1.classes_[order[:,-5:]]
print(n)
r = [p[::-1] for p in n]
print(r)

输出:

[array(['20048', '20011'], 
      dtype='|S5'), array(['20048', '20011'], 
      dtype='|S5'), array(['20048', '20011'], 
      dtype='|S5'), array(['20048', '20011'], 
      dtype='|S5')]

需要尝试删除dtypes并仅保留反向数组。

3 个答案:

答案 0 :(得分:3)

您的列表似乎缺少逗号,因此您实际上每个列表都有一个字符串,但如果要修改原始子列表,则可以使用list.reverse inplace 执行此操作:

for sub in lists:
     sub.reverse()

你实际上有一个numpy数组,所以假设它的格式正确,你可以:

In [50]: arr
Out[50]: 
array([['20015', '20013', '20044', '20001', '20002'],
       ['20002', '20015', '20001', '20013', '20070']], 
      dtype='|S5')

In [51]: arr[:,::-1]
Out[51]: 
array([['20002', '20001', '20044', '20013', '20015'],
       ['20070', '20013', '20001', '20015', '20002']], 
      dtype='|S5')

保存到文件中:

In [57]: arr[:,::-1].tofile("out.txt",sep=",")

In [58]: cat out.txt
20002,20001,20044,20013,20015,20070,20013,20001,20015,20002

如果你想要每行一行savetxt:

In [94]: np.savetxt("out.txt",arr[:,::-1],fmt="%s")

In [95]: cat out.txt
20002 20001 20044 20013 20015
20070 20013 20001 20015 20002

答案 1 :(得分:2)

l = [['a', 'b', 'c'], ['d', 'e', 'f']]

然后像这样简单的列表理解

[li[::-1] for li in l]

为您提供所需的输出:

[['c', 'b', 'a'], ['f', 'e', 'd']]

修改

当你改变你的问题时:

我们假设您现在拥有一系列数组:

import numpy as np
l2 = np.array([np.array(['a', 'b', 'c']), np.array(['d', 'e', 'f'])])

然后你可以执行以下操作来摆脱dtypes

map(list, l2[:, ::-1])

给你:

[['c', 'b', 'a'], ['f', 'e', 'd']]

但是从您的问题来看,仍然很难说出您想要的确切输出格式。

答案 2 :(得分:0)

另一种列表理解方法

作为列表理解的忠实拥护者,我的方法与Cleb相似,但是使用了与列表类相反的方法,而不是使用list_name[::-1]方法。

l1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9, 10]]
[l1[i].reverse() for i in range(len(l1))]

产量...

[[3, 2, 1], [6, 5, 4], [10, 9, 8, 7]]

关键是不要将理解力设置为等于任何值。