2011-03-30 3 views
1

поэтому у меня есть список с целой кучей кортежейпитона сортировка

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 ...

что я сделал неправильно ??

Я использую питона 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) 

работает отлично, тогда как только печать (J) будет возвращать эту ошибку

+0

Ваш код отлично подходит для меня в Python 3.1.2. – Gregory

+0

То же самое здесь, «работает для меня». Вы уверены, что список, который вы сортируете, действительно имеет эти значения? Возможно, у вас много элементов (в том списке 1000+ с нулями). Ошибки, которые у вас кажутся отдельной проблемой, могут быть возможной причиной здесь. Является ли сортировка проблемой, о которой вы хотите позаботиться, или этой ошибкой? –

+0

код отлично работает в Python 2.6 – joaquin

ответ

0

As другие сказали, что код в порядке. Вы должны попытаться изолировать ситуацию и попытаться выяснить, где именно произошла эта проблема.

  • Это происходит в простом скрипте, который содержит только назначение списка и операцию сортировки?
  • Работает ли другой список операций? Попробуйте нарезку, повторение по ней или сортировку без пользовательской функции.
  • Это происходит во фрагменте текущего списка? Bisection method - ваш друг здесь.
+0

, пожалуйста, добавьте ссылку на этот метод Bisection – joaquin

+0

@joaquin: Done :) –

1

Я думаю, что ваш код работает правильно, и вы видите первую часть списка, где ключ действительно 0.0. Вы просто отсортировать список в порядке возрастания :-)

+0

нет на самом деле нет 0 в кортежах –

0

Возможно, стоит сравнить отсортированные и несортированные списки, чтобы увидеть, действительно ли сортировка меняет данные. Вы можете попробовать что-то простое:

print sum(e[2] for e in j) 
j = sorted(j, key=lambda e : e[2]) 
print sum(e[2] for e in j) 
Смежные вопросы