如何按照python中的内部列表对包含内部列表的列表进行排序

如何按照python中的内部列表对包含内部列表的列表进行排序,python,python-3.x,sorting,lis,Python,Python 3.x,Sorting,Lis,我有一个列表,其中包含列表、示例: table[0] = ['255.255.255.255', '58267', '233', 'ESTABLISHED'] table[1] = ['255.132.0.0', '38367', '273', 'CLOSED'] 我想按内部列表对列表“table”进行排序,例如: 我想根据列表中最后一个索引中的字符串,按字母顺序对“table”进行排序,该索引位于“table”中的每个索引中。它看起来是这样的: table[0] = ['255.132.0.

我有一个列表,其中包含列表、示例:

table[0] = ['255.255.255.255', '58267', '233', 'ESTABLISHED']
table[1] = ['255.132.0.0', '38367', '273', 'CLOSED']
我想按内部列表对列表“table”进行排序,例如:

我想根据列表中最后一个索引中的字符串,按字母顺序对“table”进行排序,该索引位于“table”中的每个索引中。它看起来是这样的:

table[0] = ['255.132.0.0', '38367', '273', 'CLOSED']
table[1] = ['255.255.255.255', '58267', '233', 'ESTABLISHED']
他们换了位置,因为“C”在“E”之前

我试过这个:

table.sort(key=lambda x: x.sort())
试试这个:

table.sort(key=lambda x: x[-1])

print(table)
输出:

[['255.132.0.0', '38367', '273', 'CLOSED'], ['255.255.255.255', '58267', '233', 'ESTABLISHED']]
试试这个:

table.sort(key=lambda x: x[-1])

print(table)
输出:

[['255.132.0.0', '38367', '273', 'CLOSED'], ['255.255.255.255', '58267', '233', 'ESTABLISHED']]

另一种方法是使用
numpy
argsort()
函数。 它按排序后的顺序返回索引

import numpy as np
table = [['255.255.255.255', '58267', '233', 'ESTABLISHED'], ['255.132.0.0', '38367', '273', 'CLOSED']]

sorted_indexes = np.argsort([row[-1] for row in table])

sorted_table = np.array(table)[sorted_indexes]
# as list (and not numpy array):
sorted_table.tolist()

# [['255.132.0.0', '38367', '273', 'CLOSED'],
#  ['255.255.255.255', '58267', '233', 'ESTABLISHED']]

但是
np.argsort()
的优点是它也可以用于数据帧:

import pandas as pd
df = pd.DataFrame(table)

sorted_indexes = np.argsort(df.iloc[:, -1])

sorted_df = df.iloc[sorted_indexes, :]

sorted_df                                                                                             

#                  0      1    2            3
# 1      255.132.0.0  38367  273       CLOSED
# 0  255.255.255.255  58267  233  ESTABLISHED

# you can get numpy arrays by `.values`
# and from numpy array to normal lists by `.tolist()
# so:

sorted_df.values.tolist() 

# [['255.132.0.0', '38367', '273', 'CLOSED'],
#  ['255.255.255.255', '58267', '233', 'ESTABLISHED']]
但熊猫当然有内在的种类:

df.sort_values(by=[3])

您可以通过为
指定多个列名或列索引,它们确定排序的优先级列值。

使用
.values.tolist()
可以将数据帧重新转换回简单列表。

另一种方法是使用
numpy
argsort()函数。
它按排序后的顺序返回索引

import numpy as np
table = [['255.255.255.255', '58267', '233', 'ESTABLISHED'], ['255.132.0.0', '38367', '273', 'CLOSED']]

sorted_indexes = np.argsort([row[-1] for row in table])

sorted_table = np.array(table)[sorted_indexes]
# as list (and not numpy array):
sorted_table.tolist()

# [['255.132.0.0', '38367', '273', 'CLOSED'],
#  ['255.255.255.255', '58267', '233', 'ESTABLISHED']]

但是
np.argsort()
的优点是它也可以用于数据帧:

import pandas as pd
df = pd.DataFrame(table)

sorted_indexes = np.argsort(df.iloc[:, -1])

sorted_df = df.iloc[sorted_indexes, :]

sorted_df                                                                                             

#                  0      1    2            3
# 1      255.132.0.0  38367  273       CLOSED
# 0  255.255.255.255  58267  233  ESTABLISHED

# you can get numpy arrays by `.values`
# and from numpy array to normal lists by `.tolist()
# so:

sorted_df.values.tolist() 

# [['255.132.0.0', '38367', '273', 'CLOSED'],
#  ['255.255.255.255', '58267', '233', 'ESTABLISHED']]
但熊猫当然有内在的种类:

df.sort_values(by=[3])

您可以通过
指定多个列名或列索引,它们确定排序的优先级列值。

使用
.values.tolist()
您可以将数据帧重新转换回简单的列表。

哦,我在python方面没有那么先进,哈哈,谢谢@Maya用于处理表格-您应该尽快学习数据帧。这会让你的生活变得更轻松。@Corey Schafer在youtube上的Maya教程非常适合快速入门!非常感谢。哦,我在python方面没有那么先进,哈哈,但是谢谢你@Maya用于处理表格-您应该尽快学习数据帧。这会让你的生活变得更轻松。@Corey Schafer在youtube上的Maya教程非常适合快速入门!谢谢大家!@你能总结一下解释吗。我也不清楚这是如何工作的?所以我认为代码按照内部列表最后一个位置的内容对“表”进行排序(x=内部列表,x[-1]=内部列表的最后一个位置)。默认排序是按字母顺序:)@Maya请您总结一下解释。我也不清楚这是如何工作的?所以我认为代码按照内部列表最后一个位置的内容对“表”进行排序(x=内部列表,x[-1]=内部列表的最后一个位置)。默认排序是按字母顺序:)