我有一个算法生成一个包含未知数量的子列表的列表,每个子列表具有未知数量的字符串元素以及一个浮点数.我需要根据这个浮点数在主列表中排序这些子列表.此外,不重新排列子列表中的字符串的顺序.
我目前正在运行一段代码(下面链接),使用dict对其进行排序.你可以看到我正在获得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","2W HZ"],["1 NWZ","3E FZ","SNOK","POK",3.0,"2E AK",["1 BW","1AW AS","1BWAK","TESTK",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有一个方便的键关键字参数,让您指定一个函数来调用以确定列表应该排序的信息.
对列表进行排序就像编写一个返回每个子列表中包含的浮点值的函数一样简单:
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','2W HZ'] ['1 NWZ','SNOK','2W HZ']
请注意,.sort()方法就地对列表进行排序.您还可以使用sorted()
function生成已排序的新列表;它采用相同的论点:
orderedlist = sorted(listed,key=sortOnFloat)
但请注意,就地排序总是更快.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。