Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_List_Sorting_Match - Fatal编程技术网

Python 最好的方法是根据元组的第一个元素重新排列元组列表,以匹配字符串?

Python 最好的方法是根据元组的第一个元素重新排列元组列表,以匹配字符串?,python,string,list,sorting,match,Python,String,List,Sorting,Match,我有一个元组列表,如下所示: [(['A', 'E', 'J', 'M', 'S'],), (['E', 'C', 'D', 'A', 'A'],), (['F', 'B', 'F', 'C', 'C'],)] 或者,如果更简单的话,在我使用zip之前,它看起来是这样的: [['A', 'E', 'J', 'M', 'S'], ['E', 'C', 'D', 'A', 'A'], ['F', 'B', 'F', 'C', 'C']] 我正试图重新排列最上面的一行,使其显示为J A m E S

我有一个元组列表,如下所示:

[(['A', 'E', 'J', 'M', 'S'],), (['E', 'C', 'D', 'A', 'A'],), (['F', 'B', 'F', 'C', 'C'],)]
或者,如果更简单的话,在我使用zip之前,它看起来是这样的:

[['A', 'E', 'J', 'M', 'S'],
['E', 'C', 'D', 'A', 'A'],
['F', 'B', 'F', 'C', 'C']]
我正试图重新排列最上面的一行,使其显示为J A m E S,并让下面的几行跟随。最好的办法是什么。谢谢你的帮助

我的目标输出是

[['J', 'A', 'M', 'E', 'S'],
['D', 'E', 'A', 'C', 'A'],
['F', 'F', 'C', 'B', 'C']]

假设手动排列第一行,则创建一个numpy.ndarray,并使用手动选择的索引数组对其进行切片:

In [117]: a=np.array([['A', 'E', 'J', 'M', 'S'],
     ...: ['E', 'C', 'D', 'A', 'A'],
     ...: ['F', 'B', 'F', 'C', 'C']])

In [118]: idx=[2,0,3,1,4]  #index array

In [119]: a[:,idx]
Out[119]: 
array([['J', 'A', 'M', 'E', 'S'],
       ['D', 'E', 'A', 'C', 'A'],
       ['F', 'F', 'C', 'B', 'C']], 
      dtype='|S1')

假设手动排列第一行,则创建一个numpy.ndarray,并使用手动选择的索引数组对其进行切片:

In [117]: a=np.array([['A', 'E', 'J', 'M', 'S'],
     ...: ['E', 'C', 'D', 'A', 'A'],
     ...: ['F', 'B', 'F', 'C', 'C']])

In [118]: idx=[2,0,3,1,4]  #index array

In [119]: a[:,idx]
Out[119]: 
array([['J', 'A', 'M', 'E', 'S'],
       ['D', 'E', 'A', 'C', 'A'],
       ['F', 'F', 'C', 'B', 'C']], 
      dtype='|S1')

创建包含“J”、“a”、“M”等键的词典。。指向一些数字以获得所需的顺序,然后使用此字典对解压缩的versionzip*进行排序。。你的名单

>>> lis = [['A', 'E', 'J', 'M', 'S'],
['E', 'C', 'D', 'A', 'A'],
['F', 'B', 'F', 'C', 'C']]
>>> d = {'J':0, 'A':1, 'M':2, 'E':3, 'S':4}
>>> zip(*sorted(zip(*lis), key= lambda x: (d[x[0]])))
[('J', 'A', 'M', 'E', 'S'), ('D', 'E', 'A', 'C', 'A'), ('F', 'F', 'C', 'B', 'C')]

创建包含“J”、“a”、“M”等键的词典。。指向一些数字以获得所需的顺序,然后使用此字典对解压缩的versionzip*进行排序。。你的名单

>>> lis = [['A', 'E', 'J', 'M', 'S'],
['E', 'C', 'D', 'A', 'A'],
['F', 'B', 'F', 'C', 'C']]
>>> d = {'J':0, 'A':1, 'M':2, 'E':3, 'S':4}
>>> zip(*sorted(zip(*lis), key= lambda x: (d[x[0]])))
[('J', 'A', 'M', 'E', 'S'), ('D', 'E', 'A', 'C', 'A'), ('F', 'F', 'C', 'B', 'C')]

您希望将数据与排序键关联,排序,然后按顺序提取数据。或多或少的DSU。在本例中,zip是一种快速“交叉”矩阵的方法,因此压缩元组,按照您的意愿进行排序。。。在下面的示例中,我使用了一个固定的映射,因为我不知道您的排序标准,请使用另一种方式:

input = [['A', 'E', 'J', 'M', 'S'],
    ['E', 'C', 'D', 'A', 'A'],
    ['F', 'B', 'F', 'C', 'C']]

input_zip = zip(*input)
print input_zip
[('A', 'E', 'F'),
 ('E', 'C', 'B'),
 ('J', 'D', 'F'),
 ('M', 'A', 'C'),
 ('S', 'A', 'C')]

indices = [2,0,3,1,4]
output = [input_zip[x] for x in indices]
[('J', 'D', 'F'),
 ('A', 'E', 'F'),
 ('M', 'A', 'C'),
 ('E', 'C', 'B'),
 ('S', 'A', 'C')]

# Zip it the other way now.
output_zip = zip(*output)
[('J', 'A', 'M', 'E', 'S'),
 ('D', 'E', 'A', 'C', 'A'),
 ('F', 'F', 'C', 'B', 'C')]

希望这不仅能回答问题,还能解释其背后的思想。

您希望将数据与排序键关联,排序,然后按顺序提取数据。或多或少的DSU。在本例中,zip是一种快速“交叉”矩阵的方法,因此压缩元组,按照您的意愿进行排序。。。在下面的示例中,我使用了一个固定的映射,因为我不知道您的排序标准,请使用另一种方式:

input = [['A', 'E', 'J', 'M', 'S'],
    ['E', 'C', 'D', 'A', 'A'],
    ['F', 'B', 'F', 'C', 'C']]

input_zip = zip(*input)
print input_zip
[('A', 'E', 'F'),
 ('E', 'C', 'B'),
 ('J', 'D', 'F'),
 ('M', 'A', 'C'),
 ('S', 'A', 'C')]

indices = [2,0,3,1,4]
output = [input_zip[x] for x in indices]
[('J', 'D', 'F'),
 ('A', 'E', 'F'),
 ('M', 'A', 'C'),
 ('E', 'C', 'B'),
 ('S', 'A', 'C')]

# Zip it the other way now.
output_zip = zip(*output)
[('J', 'A', 'M', 'E', 'S'),
 ('D', 'E', 'A', 'C', 'A'),
 ('F', 'F', 'C', 'B', 'C')]

希望这不仅能回答问题,还能解释其背后的思想。

因此,听起来您想要的是首先对数据进行排序,以便将每个列表中的对应元素放入其所属的列表中,因此:

    input = [['A', 'E', 'J', 'M', 'S'],
            ['E', 'C', 'D', 'A', 'A'],
            ['F', 'B', 'F', 'C', 'C']]
    rearrangedlist = [[input[x][y] for x in range(len(input))] for y in range(len(input[0]))]

    # Gives rearrangedlist = [['A', 'E', 'F'],
                             ['E', 'C', 'B'],
                             ['J', 'D', 'F'],
                             ['M', 'A', 'C'],
                             ['S', 'A', 'C']]
然后:

给出:

    ['J', 'D', 'F']
    ['A', 'E', 'F']
    ['M', 'A', 'C']
    ['E', 'C', 'B']
    ['S', 'A', 'C']

因此,听起来您想要的是首先对数据进行排序,以便将每个列表中的对应元素包含在其所属的列表中,因此:

    input = [['A', 'E', 'J', 'M', 'S'],
            ['E', 'C', 'D', 'A', 'A'],
            ['F', 'B', 'F', 'C', 'C']]
    rearrangedlist = [[input[x][y] for x in range(len(input))] for y in range(len(input[0]))]

    # Gives rearrangedlist = [['A', 'E', 'F'],
                             ['E', 'C', 'B'],
                             ['J', 'D', 'F'],
                             ['M', 'A', 'C'],
                             ['S', 'A', 'C']]
然后:

给出:

    ['J', 'D', 'F']
    ['A', 'E', 'F']
    ['M', 'A', 'C']
    ['E', 'C', 'B']
    ['S', 'A', 'C']

您是手动执行此操作,还是使用某种算法重新排列第一个列表?其他两个列表的排序标准是什么?其他两个列表只需与它们相对于顶部列表的位置相匹配。整个程序是一个加密脚本,JAMES列表之后的两个列表用作密钥。您是手动执行此操作,还是使用某种算法重新排列第一个列表?其他两个列表的排序标准是什么?其他两个列表只需与它们相对于顶部列表的位置相匹配。整个程序是一个加密脚本,JAMES列表后的2个列表用作密钥。