Mam listę par list, takich jak [['0.0', 'AAA'], ['0.0', 'AAC'], ['0.2', 'BBB']] Chcę przekroczyć listę na podstawie wartości pierwszej pozycji. W tym przykładzie chcę zachować tylko [['0.0', 'AAA'], ['0.0', 'AAC']], ponieważ obie wartości są zerowe.

Próbowałem to zrobić jako zrozumienie listy wzdłuż linii [s,c if s == min_score for s,c in this_amino] gdzie this_amino jest lista w powyższym formacie.

0
Ian Fiddes 3 grudzień 2013, 05:15

2 odpowiedzi

Najlepsza odpowiedź

Byłeś blisko. Tylko kilka części w niewłaściwym porządku

[[s, c] for s, c in this_amino if s == min_score]
3
John La Rooy 3 grudzień 2013, 01:21
>>> L = [['0.0', 'AAA'], ['0.0', 'AAC'], ['0.2', 'BBB']]
>>> [subl for subl in L if subl[0] == 0.0]
[]
>>> [subl for subl in L if subl[0] == '0.0']
[['0.0', 'AAA'], ['0.0', 'AAC']]

Jeśli Twoja lista jest posortowana na podstawie indeksu-0, a indeksowanie-0 z pierwszego Subist is min_score, a następnie itertools.takewhile ftw!

>>> min_score = '0.0'
>>> list(itertools.takewhile(lambda subl:subl[0]==min_score, L))
[['0.0', 'AAA'], ['0.0', 'AAC']]
1
inspectorG4dget 3 grudzień 2013, 01:46