2017-04-12 14 views
0

リストがリスト1を持っているとします。リスト内の要素とその値へのアクセス

list1 = [ [node1, w1], [node2, w2], [node3, w3]] 

node2がlist1に存在する場合は、w2の値を取得する必要があります。どのように私は迅速にそれを行うのですか?

stackoverflowで検索しているときに、質問に対する関連する回答が見つかりませんでした。もしあれば、私はそれを参照して喜んででしょう。 ありがとうございました!

+2

あなたは簡単な方法でそれをしないでください - リストは1度に1つずつのテスト以外の要素を見つけることのない方法をサポートしていません。ここで辞書を使いたいとします(node1、node2などは辞書キーとして適した値であると仮定します)。 – jasonharper

+0

リストをヒープとして使用しなければならないため、辞書を使用できませんでした。その目的で辞書を使用できるかどうかわかりません。私はlist1の 'if node2 if'ステートメントを使って何かができるかどうか疑問に思っていました。 –

+0

ルックアップをいくつか実行する必要がある場合は、ヒープビジネスが完了したらリストをdictに変換する価値があります。あなたのノードがハッシュ可能であれば 'asdict = dict(list1)'と同じくらい簡単です。 –

答えて

1

これは、あなたが(代わりに未定義の変数の文字列を使用して)求めているものを行うための方法です:

list1 = [ ['node1', 'w1'], ['node2', 'w2'], ['node3', 'w3']] 

for ix, l in enumerate([li for li in list1]): 
    if 'node2' in l: 
     print list1[ix][1] 

そのデータ構造は必須ではありません場合は、キー/値のペアの構造が非常に簡単になります(より速くあなたが要素の多くを持っている場合)で動作するように:!

d = {'node1': 'w1', 
    'node2': 'w2', 
    'node3': 'w3'} 

print d['node2'] 
# prints w2 
+1

そして、辞書のメンバーシップをチェックするのがリストのメンバーシップをチェックするよりも速いです。したがって、辞書として保存すると、my_dict:print my_dict ['node2'] 'に' node2 'を使用することができます。 – cullywest

0

リストから要素を取得してあなただけのリストへのインデックスに必要なのpython、 内の比較的簡単です。これはつまり、複数のレベルに行うことができます。

example = [[1,2][2,4]] 
print(example[1][1]) 
# will output 2 

をしかし、あなたが行うことができ、あなたの特定のケースでは:

list1 = [ ["node1", 1], ["node2", 2], ["node3", 3]] 
for item in list1: 
    if item[0] == "node2": 
     print(item[1]) 

# this will print 2 

あなたは関数にこの常に抽象的な可能性があり、さらに使用するために、印刷の代わりに返します。

次のように:

list1 = [ ["node1", 1], ["node2", 2], ["node3", 3]] 

def ContainedInInnerList(ls, item): 
    for x in ls: 
     if x[0] == item: 
      return(x[1]) 
    return None 

print(ContainedInInnerList(list1, "node2")) 
#output: 2 

またそれらについて読むために、より複雑なリストの内包表記を使用するとよいでしょうが、ここに行く:http://www.secnetix.de/olli/Python/list_comprehensions.hawk 私はこれが助けを願っています。

1

シンプル:

list1 = [ ['node1', 'w1'], ['node2', 'w2'], ['node3', 'w3'] ] 
print([ l[1] for l in list1 if l[0] == 'node2' ][0]) 
+0

1つのライナーが大好きですが、彼のユースケースのために簡潔であるかどうか疑問に思います。とにかく+1 – Scheme

+0

ええ、私も 'ライナー'の男です。ありがとう –

+0

ありがとう。しかし、私が推測する結論は、我々がリストを使用するなら、一方向または他の方法を反復しなければならないということです。 –

関連する問題