Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建保留顺序的列表_Python_Python 3.x_Numpy - Fatal编程技术网

Python 创建保留顺序的列表

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'),

我正在尝试将数组转换为列表。听起来很奇怪? 阵列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(['SAm_031'], 
  dtype='<U7')], dtype=object)
您可以看到L(上面)的前3个元素与A相同,但下3个元素则不同。现在,事实证明,排序是我最终想要对这个列表执行的操作,但不是在捕获已排序列表的索引之前(我需要这些索引根据列表L对另一个数组重新排序)

因此,有两个问题:

  • 有没有办法从a中获得未排序的L
  • 我是否需要这样做,或者是否有一种更具python风格的方法基于L(而不是默认顺序,它遵循a)对数组进行索引

  • 提前感谢您原谅我对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']