Python 创建保留顺序的列表
我正在尝试将数组转换为列表。听起来很奇怪? 阵列A如下所示:Python 创建保留顺序的列表,python,python-3.x,numpy,Python,Python 3.x,Numpy,我正在尝试将数组转换为列表。听起来很奇怪? 阵列A如下所示: array([array(['Afr_004'], dtype='<U7'), array(['Afr_005'], dtype='<U7'), array(['Afr_012'], dtype='<U7'), ..., array(['SAm_029'], dtype='<U7'), array(['SAm_030'], dtype='<U7'),
array([array(['Afr_004'],
dtype='<U7'),
array(['Afr_005'],
dtype='<U7'),
array(['Afr_012'],
dtype='<U7'), ...,
array(['SAm_029'],
dtype='<U7'),
array(['SAm_030'],
dtype='<U7'),
array(['SAm_031'],
dtype='<U7')], dtype=object)
您可以看到L(上面)的前3个元素与A相同,但下3个元素则不同。现在,事实证明,排序是我最终想要对这个列表执行的操作,但不是在捕获已排序列表的索引之前(我需要这些索引根据列表L对另一个数组重新排序)
因此,有两个问题:
提前感谢您原谅我对Python数据结构缺乏了解。我最终使用了一个老式的循环来构建我想要的列表
N = len(A)
L = ["?" for x in range(N)] # initialize list
for r in range(N):
L[r] = A[0][r][0]
列表已排序,即使A未排序,至少可以查看Spyder变量资源管理器中的数组或IPython提示符。我怀疑问题出在这个数组的形状上。我最终采用了另一种方法,包括导出到Excel的相同字符串列表和openpyxl包。没有问题。在一个八度音阶的会话中,我制作了
c
并保存了它
c = {'Afr_004','Afr_005','Afr_012','SAm_031','SAm_029','Ant_001','Ant_002','SAm_030'}
在伊皮顿
In [55]: arr=data['c']
In [56]: arr
Out[56]:
array([[array(['Afr_004'],
dtype='<U7'),
array(['Afr_005'],
dtype='<U7'),
array(['Afr_012'],
dtype='<U7'),
array(['SAm_031'],
dtype='<U7'),
array(['SAm_029'],
dtype='<U7'),
array(['Ant_001'],
dtype='<U7'),
array(['Ant_002'],
dtype='<U7'),
array(['SAm_030'],
dtype='<U7')]], dtype=object)
这两种方法的顺序相同。您的数据在存储之前必须已排序。从我发布的内容来看,这可能不明显,但我可以肯定A未排序,mat文件中的其他数组也未排序。您显示的唯一A已排序。此外,列表理解和列表通常不排序。它不排序:元素“Ant_001”、“Ant_002”(在L中出现在第4和第5位)在A中的列表下方。您的代码可以简化为
N=len(A);L=[A[0][i][0]表示范围(N)内的i]
。
In [55]: arr=data['c']
In [56]: arr
Out[56]:
array([[array(['Afr_004'],
dtype='<U7'),
array(['Afr_005'],
dtype='<U7'),
array(['Afr_012'],
dtype='<U7'),
array(['SAm_031'],
dtype='<U7'),
array(['SAm_029'],
dtype='<U7'),
array(['Ant_001'],
dtype='<U7'),
array(['Ant_002'],
dtype='<U7'),
array(['SAm_030'],
dtype='<U7')]], dtype=object)
In [59]: L = np.concatenate(arr[0]).ravel()
In [60]: L
Out[60]:
array(['Afr_004', 'Afr_005', 'Afr_012', 'SAm_031', 'SAm_029', 'Ant_001', 'Ant_002', 'SAm_030'],
dtype='<U7')
In [61]: L1 = [x[0] for x in arr[0]]
In [62]: L1
Out[62]:
['Afr_004',
'Afr_005',
'Afr_012',
'SAm_031',
'SAm_029',
'Ant_001',
'Ant_002',
'SAm_030']