【问题标题】:python tuple list sortingpython 元组列表排序
【发布时间】:2011-07-25 20:23:12
【问题描述】:

所以我有一个包含一大堆元组的列表

j = 

[('jHKT', 'Dlwp Dfbd Gwlgfwqs (1kkk)', 53.0),
('jHKT', 'jbdbjf Bwvbly (1kk1)', 35.0),
('jHKT', 'Tfstzfy (2006)', 9.0),
('jHKT', 'fjznfnt Dwjbzn (1kk1)', 25.0),
('jHKT', 'Vznbsq sfnkz (1k8k)', 4.0),
('jHKT', 'fxzt, Clwwny! (2005)', 8.0),
('jHKT', "Dwfs Thzs jfbn Wf'lf jbllzfd? (1kk1)", 12.0),
('jHKT', 'Chbzljbn wf thf Bwbld (1kk8)', 30.0),
('jHKT', 'Vblfdzctzwn (2006)', 8.0),
('jHKT', 'jwltbl Kwjbbt (1kk5)', 13.0)]

我尝试使用元组的第三个元素作为索引对其进行排序:

请注意,上面的列表只是部分列表...实际列表包含数千个元素

不管怎样,我做到了:

j = sorted(j, key=lambda e : e[2])

但是当我这样做时,它最终会弄乱元组的第三个元素,我非常怀疑它是否真的排序了......这是输出的另一个部分列表

('jHKT', 'Frz yzng (2004)', 0.0)
('jHKT', 'kff thr Mvp (2003)', 0.0)
('jHKT', 'HzpHkpBvttlr.ckm: Hzp Hkp 4 Lzfr (2001)', 0.0)
('jHKT', 'z Wvlk thr Lznr (1970)', 0.0)
('jHKT', '1971: erzsknrrs kf svr (2007)', 0.0)
('jHKT', 'Wzld Rzdr, Thr (1960)', 0.0)
('jHKT', 'Dzshdkgz (2005)', 0.0)
('jHKT', 'Lzttlr Thzngs, Thr (2006)', 0.0)
('jHKT', 'Trrmznvl rrrkr (2002)', 0.0)
('jHKT', 'Hqngry Bvchrlkrs Clqb, Thr (1999)', 0.0)
('jHKT', 'Swrrt Lkvr, Bzttrr (1967)', 0.0)
('jHKT', 'Trn tk Chz tk (1990)', 0.0)
('jHKT', 'Bvr-Crl-knv (1987)', 0.0)
('jHKT', 'Rknny & Czndy zn vll kf qs (2006)', 0.0)

在这种情况下,它最终将元组的所有第三个元素重置为 0...

我做错了什么??

我正在使用 python 3

#############################EDIT############# #######################

另外,当我尝试打印元组列表时,它会返回此错误:

  print(j)
IOError: [Errno 22] Invalid argument

打印会突然停止...:

 ('sadfasdf (1991)', 'xcvwert (1985)', 0.0), ('r3sdaf (1991)', 'jkzxkk (1993)', 0.0), ('werwww (1991)', 'Third WhTraceback (most recent call last):

然后出现错误

###############EDIT###################

另一方面,通过迭代打印列表效果很好

所以

for i in j:
    print(i)

工作正常,而 print(j) 会返回该错误

【问题讨论】:

  • 您的代码在 Python 3.1.2 中对我来说可以正常工作。
  • 这里也一样,“为我工作。”您确定要排序的列表实际上具有这些值吗?也许您有很多项目(在那 1000 多个有零的列表中)。您遇到的错误似乎是一个单独的问题,这可能是这里的一个可能原因。排序是您要处理的问题还是那个错误?
  • 代码在 Python 2.6 中运行良好
  • 是的,我上面写的代码也适用于我,问题可能出在列表上,但我不能在此处发布列表,因为它就像数千行一样长...如果我使用列表上面它有效,但如果我使用实际列表,它就不起作用
  • 我在排序之前打印了一次,在排序之后又打印了一次,所以没有其他代码可以干扰

标签: python list sorting python-3.x tuples


【解决方案1】:

我认为您的代码可以正常工作,并且您会看到列表的第一部分,其中 key 实际上是 0.0。您只需按升序对列表进行排序:-)

【讨论】:

    【解决方案2】:

    我也认为它还可以[快速浏览] .. 检查这个链接..它是关于python中的各种排序技术

    http://wiki.python.org/moin/HowTo/Sorting/

    【讨论】:

      【解决方案3】:

      正如其他人所说,代码非常好。您应该尝试隔离情况并尝试找出问题的确切发生位置。

      • 它是否发生在仅包含列表分配和排序操作的简单脚本中?
      • 其他列表操作是否有效?尝试在不使用自定义函数的情况下对其进行切片、迭代或排序。
      • 它是否发生在当前列表的一部分中? Bisection method 是你的朋友。

      【讨论】:

      • 请添加该二分法的链接
      【解决方案4】:

      可能值得比较已排序和未排序的列表,以查看排序是否真的改变了数据。您可以尝试以下简单的方法:

      print sum(e[2] for e in j)
      j = sorted(j, key=lambda e : e[2])
      print sum(e[2] for e in j)
      

      【讨论】:

        猜你喜欢
        • 2014-05-11
        • 2021-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-04
        • 2021-04-10
        • 2017-02-12
        相关资源
        最近更新 更多