gpt4 book ai didi

python - 对包含列表的列表进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:47 25 4
gpt4 key购买 nike

我有一种算法可以生成一个包含未知数量子列表的列表,每个子列表具有未知数量的字符串元素以及一个 float 。我需要根据这个 float 在主列表中对这些子列表进行排序。此外,子列表中字符串的顺序不会重新排列。

我目前正在运行一段代码(链接如下),使用字典对其进行排序。如您所见,我遇到了 KeyErrors。我以前没有使用过听写,所以我不确定从这里去哪里。如果有更好的方法,那么我也会对此开放。 http://ideone.com/wr8UA

float 不是连续的,我不确定使用我的方法这有多大意义。意思是,数字偶尔会被跳过(在 Ideone 的示例列表中,它们是 1.0、2.0、4.0;跳过 3.0 以在运行时模拟这种情况)。它们也不在子列表中的任何特定位置,因此所有 for 循环都在搜索它们。

希望这很清楚,我之前试过问它并得到了反对票,而不是关于什么让人们感到困惑的问题。让我知道是否有问题。谢谢大家!

编辑:正文中要求的代码:

listed = [ ["1 NWZ", "1 RWZ", "2 NWZ", "2 RWZ", "1E HZ", "1W HZ", "1-2EHZ", 2.0, "2W HZ"],
["1 NWZ", "1W HZ", "3E FZ", "SNOK", "POK", 3.0, "1-2EHZ", "2E AK", "2W HZ"],
["1 BW", "1AW AS", "3E FZ", "1BWAK", "POK", "TESTK", "1-2EHZ", "2E AK", 1.0]]

dictionary={}
for sub_list in listed:
for value in sub_list:
if isinstance(value,float):
dictionary[str(value)]=sub_list
else:
pass
ordered_list=[]
for i in range(1,len(listed)+1):
if dictionary[str(i)]:
ordered_list.append(dictionary[str(i)])

for sub_list in ordered_list:
print sub_list

最佳答案

sort method有一个方便的 key 关键字参数,让您指定一个函数来调用以确定列表应该根据哪些信息进行排序。

对列表进行排序就像编写一个返回每个子列表中包含的浮点值的函数一样简单:

def sortOnFloat(sublist):
return [v for v in sublist if isinstance(v, float)]

请注意,我只是返回一个包含所有浮点值的列表;比只返回一个要容易得多。即使子列表中有 0 个浮点值,这也会起作用。

像这样对你的列表进行排序:

listed.sort(key=sortOnFloat)

我已经克隆了您的示例并使用上述方法对其进行了更新:http://ideone.com/u8ufK

生成的输出:

['1 BW', '1AW AS', '3E FZ', '1BWAK', 'POK', 'TESTK', '1-2EHZ', '2E AK', 1.0]
['1 NWZ', '1 RWZ', '2 NWZ', '2 RWZ', '1E HZ', '1W HZ', '1-2EHZ', 2.0, '2W HZ']
['1 NWZ', '1W HZ', '3E FZ', 'SNOK', 'POK', 3.0, '1-2EHZ', '2E AK', '2W HZ']

请注意,.sort() 方法会就地对列表进行排序。您还可以使用 sorted() function生成一个已排序的新列表;它采用相同的参数:

orderedlist = sorted(listed, key=sortOnFloat)

但请注意,就地排序总是更快。

关于python - 对包含列表的列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11364045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com