0

次のようなリストを含む 2 つのリストを作成すると:

bad_list.append(['blue_widget', 'cracked', '776'])
bad_list.append(['red_widget', 'not_smooth', '545']) 
bad_list.append(['yellow_widget', 'spots', '35']) 
bad_list.append(['green_widget', 'smells_bad', '10'])
bad_list.append(['purple_widget', 'not_really_purple', '10'])


good_list.append(['blue_widget', 'ok', '776'])
good_list.append(['red_widget', 'ok', '545']) 
good_list.append(['green_widget', 'ok', '10'])

リスト内包表記を使用して 2 つのリストを比較し、最初の要素 (x_widget) を比較対象として使用して、適切なリストに存在する不適切なリストのすべての項目を削除できるようにしたいと考えています。上記の例を使用すると、次のようになります。

['yellow_widget', 'spots', '35']
['purple_widget', 'not_really_purple', '10']

リスト内包表記を使用してみましたが、機能しますが、新しいリストは各行を保持しません:

final_list = [x for x in bad_list[0] if x not in good_list[0]]

final_list の for item を使用してコンテンツを印刷すると、次のようになります。

yellow_widget
smells_bad
10

手がかりは大歓迎です。

4

5 に答える 5

1

一発ギャグ

[x for x in bad_list if any(x[0] == y[0] for y in good_list)]

*ありがとう @Bakuriu

于 2013-10-25T16:36:46.243 に答える
0

決して最適化されたわけではありませんが、これでうまくいくはずです: http://codecube.io/AD7RHA

bad_list=[]
good_list=[]

bad_list.append(['blue_widget', 'cracked', '776'])
bad_list.append(['red_widget', 'not_smooth', '545']) 
bad_list.append(['yellow_widget', 'spots', '35']) 
bad_list.append(['green_widget', 'smells_bad', '10'])
bad_list.append(['purple_widget', 'not_really_purple', '10'])


good_list.append(['blue_widget', 'ok', '776'])
good_list.append(['red_widget', 'ok', '545']) 
good_list.append(['green_widget', 'ok', '10'])

# ['yellow_widget', 'spots', '35']
# ['purple_widget', 'not_really_purple', '10']

labels = zip(*good_list)[0]

new_bad_list=[]

for item in bad_list:
    if item[0] not in labels:
        new_bad_list.append(item)

print new_bad_list

またはこのワンライナー:

new_bad_list=[item for item in bad_list if item[0] not in zip(*good_list)[0]]
于 2013-10-25T16:26:05.493 に答える