4

質問のタイトルは、私が疑問に思っていることです。

タプルのリストがあるとします:

tuple_list = [(1,'a'),(2,'b'),(3,'c')]

tuple_list の最初のすべての要素を参照するには、何を使用すればよいでしょうか? 返してほしいのは、最初の要素のリストです。tuple_list.keys() が辞書の場合に機能するのと同じように。このような:

(tuple_list expression here) = [1,2,3]

これは可能ですか?単純な式はありますか、それとも tuple_list を反復処理して最初の要素の別のリストを作成する必要がありますか?

さらに、私がこれをやりたい理由は、次のことをしたいからです。

first_list = [(1,'a'),(2,'b'),(3,'c')]
second_list = [1,2,3,4,4,5]

third_list = set(second_list) - set(first_list(**first elements expression**)) = [4,5]

辞書を使用していた古いコードのリストにこれを適応させています。

first_dict = {1:'a',2:'b',3:'c'}
second = [1,2,3,4,4,5]

third_dict = set(second) - set(first_dict.keys()) = [4,5]

したがって、リストの .key() がないという私のジレンマ

いつものように、質問を改善/明確化できるかどうかコメントしてください。

ありがとう、

アレックス

4

2 に答える 2

2

はい、可能です。

リスト内包表記を使用します。

>>> tuple_list = [(1,'a'),(2,'b'),(3,'c')]
>>> [x[0] for x in tuple_list]
[1, 2, 3]

また:

>>> from operator import itemgetter
>>> f = itemgetter(0)
>>> map(f, tuple_list)
[1, 2, 3]

あなたの例:

>>> first_list = [(1,'a'),(2,'b'),(3,'c')]
>>> second_list = [1,2,3,4,4,5]
>>> set(second_list) - set(x[0] for x in first_list)
set([4, 5])
>>> set(second_list) - set(map(f, first_list))
set([4, 5])

または @JonClements で提案されているように、これはより高速になります。

>>> set(second_list).difference(map(f, first_list))
set([4, 5])

これを複数回行っている場合は、次のように変換できることに注意してfirst_listくださいdict

>>> dic = dict(first_list)
>>> set(second_list).difference(dic)
set([4, 5])
于 2013-07-11T18:53:25.597 に答える
2

このリスト内包表記を試すことができます:

tuple_list = [(1,'a'),(2,'b'),(3,'c')]
desired_list = [ x for x, _ in tuple_list ] 

次のものも使用できますmap

desired_list = map(lambda(x,_):x, tuple_list)

編集に基づいて、これを行うことができます:

>>> first_list = [(1,'a'),(2,'b'),(3,'c')]
>>> second_list = [1,2,3,4,4,5]
>>> third_list = set(second_list).difference(x for x, _ in first_list)
>>> third_list
set([4, 5])
于 2013-07-11T18:53:53.003 に答える