【发布时间】:2012-07-07 00:30:37
【问题描述】:
我有一种算法可以生成一个包含未知数量子列表的列表,每个子列表都有未知数量的字符串元素和一个浮点数。我需要根据这个浮动在主列表中排序这些子列表。此外,子列表中的字符串顺序不会被重新排列。
我目前正在运行一段代码(链接如下),它使用字典对其进行排序。如您所见,我收到了 KeyErrors。我以前没有使用过 dicts,所以我不知道从哪里开始。如果有更好的方法,那么我也对此持开放态度。 http://ideone.com/wr8UA
浮动不是连续的,我不确定使用我拥有的方法这有多大意义。意思是,偶尔会跳过数字(在 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
【问题讨论】:
-
把代码放到问题里面,没那么长!
-
@heltonbiker 当然,但我也会留下链接,因为它列出了错误和行号。
-
如果您按原样使用,提供的大多数答案将在 n^2 * log(n) 时间内运行。您应该优化以确保您的浮动首先出现在子列表中,并采用使用第一个元素的快捷方式,以免每次都在列表中搜索它。
-
@Wug 是的,我确定在另一种算法中可以做到这一点。但这种效率是否与小系列数据相关?就目前而言,每个子列表可能不会超过 50 个值(很少这么高),并且子列表将少于 15 个。以前的算法效率课程让我相信,对于这样的少量数据,我只会节省几毫秒,即使 big-O 效率要好得多
-
对于小型数据集,它可能无关紧要。对于可能包含一百个元素的一百个列表的任何内容,您可能会看到明显的差异。
标签: python list sorting dictionary