Python 2.7 通过排序重新排列结果(Python 2.7.15)

Python 2.7 通过排序重新排列结果(Python 2.7.15),python-2.7,Python 2.7,我正试图按顺序重新排列这一行 如果“MCS7”更改为“MCS11”,如下所示, 您将如何编写代码 list = [['', '', '1', '2412', 'MCS11', 'Burst Power (Average)', '-100', '30', '12.09', 'dBm', 'PASS'], ['', '', '1', '2412', 'MCS11', 'EVM All Carriers (Average)', '', '-27', '-31.56', 'dB', 'PASS'], [

我正试图按顺序重新排列这一行

如果“MCS7”更改为“MCS11”,如下所示, 您将如何编写代码

list = [['', '', '1', '2412', 'MCS11', 'Burst Power (Average)', '-100', '30', '12.09', 'dBm', 'PASS'],
['', '', '1', '2412', 'MCS11', 'EVM All Carriers (Average)', '', '-27', '-31.56', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS11', 'EVM Data Carriers (Average)', '', '-27', '-31.45', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS11', 'EVM Pilot Carriers (Average)', '', '-8', '-33.38', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS11', 'Center Freq. Error (Average)', '-60300', '60300', '663.96', 'Hz', 'PASS'],
['', '', '1', '2412', 'MCS5', 'Burst Power (Average)', '-100', '30', '12.09', 'dBm', 'PASS'],
['', '', '1', '2412', 'MCS5', 'EVM All Carriers (Average)', '', '-27', '-31.56', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS5', 'EVM Data Carriers (Average)', '', '-27', '-31.45', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS5', 'EVM Pilot Carriers (Average)', '', '-8', '-33.38', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS5', 'Center Freq. Error (Average)', '-60300', '60300', '663.96', 'Hz', 'PASS'],
['', '', '1', '2412', 'MCS6', 'Burst Power (Average)', '-100', '30', '12.02', 'dBm', 'PASS'],
['', '', '1', '2412', 'MCS6', 'EVM All Carriers (Average)', '', '-27', '-32.08', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS6', 'EVM Data Carriers (Average)', '', '-27', '-31.98', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS6', 'EVM Pilot Carriers (Average)', '', '-8', '-33.56', 'dB', 'PASS'],
['', '', '1', '2412', 'MCS6', 'Center Freq. Error (Average)', '-60300', '60300', '763.52', 'Hz', 'PASS']]
for l in sorted(list, key = lambda x: ( x[4], x[5] ) ):
    print l
通过订购“MCS5~MCS11”,我期望输出如下所示


您需要根据内部列表的一个元素对列表进行排序。A. 类似的问题(这里使用列表元组提问:)

您可以使用和lambda或 8operator.itemgetter]()用于它:

输出:

['', '', '1', '2412', 'MCS5', 'Burst Power (Average)', '-100', '30', '12.09', 'dBm', 'PASS']
['', '', '1', '2412', 'MCS5', 'Center Freq. Error (Average)', '-60300', '60300', '663.96', 'Hz', 'PASS']
['', '', '1', '2412', 'MCS5', 'EVM All Carriers (Average)', '', '-27', '-31.56', 'dB', 'PASS']
['', '', '1', '2412', 'MCS5', 'EVM Data Carriers (Average)', '', '-27', '-31.45', 'dB', 'PASS']
['', '', '1', '2412', 'MCS5', 'EVM Pilot Carriers (Average)', '', '-8', '-33.38', 'dB', 'PASS']
['', '', '1', '2412', 'MCS6', 'Burst Power (Average)', '-100', '30', '12.02', 'dBm', 'PASS']
['', '', '1', '2412', 'MCS6', 'Center Freq. Error (Average)', '-60300', '60300', '763.52', 'Hz', 'PASS']
['', '', '1', '2412', 'MCS6', 'EVM All Carriers (Average)', '', '-27', '-32.08', 'dB', 'PASS']
['', '', '1', '2412', 'MCS6', 'EVM Data Carriers (Average)', '', '-27', '-31.98', 'dB', 'PASS']
['', '', '1', '2412', 'MCS6', 'EVM Pilot Carriers (Average)', '', '-8', '-33.56', 'dB', 'PASS']
['', '', '1', '2412', 'MCS7', 'Burst Power (Average)', '-100', '30', '12.09', 'dBm', 'PASS']
['', '', '1', '2412', 'MCS7', 'Center Freq. Error (Average)', '-60300', '60300', '663.96', 'Hz', 'PASS']
['', '', '1', '2412', 'MCS7', 'EVM All Carriers (Average)', '', '-27', '-31.56', 'dB', 'PASS']
['', '', '1', '2412', 'MCS7', 'EVM Data Carriers (Average)', '', '-27', '-31.45', 'dB', 'PASS']
['', '', '1', '2412', 'MCS7', 'EVM Pilot Carriers (Average)', '', '-8', '-33.38', 'dB', 'PASS']
阅读有关排序的更多信息:

关于lambda:


要按“纯”数值排序,请使用:

for l in sorted(data, key = lambda x: ( int(x[4][3:]) , x[5]) ):
    print l
角色

int(x[4][3:])

通过切片去除“MCS”,并将余数转换为整数作为元组的第一部分

亲爱的Patrick,如果“MCS7”更改为“MCS11”,则有“MCS5”、“MCS6”和“MCS11”。您将如何更改编码?因为实际的重新安排将是“MCS11”、“MCS5”、“MCS6”。如果“MCS7”更改为“11Mbps”,“MCS6”更改为“5.5Mbps”,“MCS6”更改为“1Mbps”,您将如何编码?您将如何编码?我并不是要回答你提出的每一个后续问题。在软件开发过程中,这被称为。对整数的处理方法与对整数的处理方法相同:您可以找到一种方法来分割所需的数据,然后使其成为一个数字(int/float)-您可以为此编写一个小的helper函数,并应用它
(helper(x[4]),x[5])
,而不是
(int(x[4][3:),x[5])
。在您的情况下,您的助手可以删除字符串中的所有字母-除非您也得到了
'34Evil14Things2Do'
=>
34142
对于进一步的具体问题感到抱歉,这让您不高兴,因为我认为您可能有聪明的方法来排序“11Mbps,5.5Mbps,1Mbps”。最后一句话,我试着从字符串中删除所有字母。谢谢。亲爱的Patrick,在“11Mbps,5.5Mbps,1Mbps”的条件下,我在不删除字符串的情况下尝试代码,仅供您参考,如下所示,并感谢您对键函数“lambda”的建议。对于已排序的l(数据,key=lambda x:(int(x[3]),eval(x[4]),split('M')[0]):打印l
for l in sorted(data, key = lambda x: ( int(x[4][3:]) , x[5]) ):
    print l
int(x[4][3:])