2017-03-03 2 views
0

は、だから私はこのリストの最初のタプルの最初の文字はどうやってチェックしますか?

userPassList=[('*username','password'),('username2','password2'),('username3','password3')] 

のようなものを持っていると私は最初の文字として*とユーザー名のリストを検索します。

私はのようなものを考えていた:

i=0 
while i < len(self.userPassList): 
    if (self.userPassList[i][:1]=='*'): 
     self.conn.sendall(self.userPassList[i][1:]) 
    i= i+1 

が、このありえない全く正しいです。任意のアイデアや提案?

編集:私はユーザー名だけのパスワードを持っていません。

答えて

0

まあi = i + 1ニーズこれは、あなたがそれをすると思うものを生成するつもりはないあなただけ使用することができますブロックし、代わりに[:1]の場合[0]

1

の外に。

コードのセクションをすべて単独で実行してみてください。 これを処理するプログラムを書く前に、行(userPassList= ...で始まる)が構文的に正しいことを確認してください。なぜここ

は次のとおりです。

username = 'me' 
username2 = 'me2' 
username3= 'me3' 
password = password2 = password3 = '' 
userPassList=[(*username,password),(username2,password2),(username3,password3)] 
print(userPassList) 
[('m', 'e', ''), ('me2', ''), ('me3', '')] 

「*」この場合には、あなたに反復可能オブジェクトを与え、タプルが予想よりも長くなるように、反復処理されます。

おそらく、あなたは意味:

username = '*me' 
username2 = 'me2' 
username3= 'me3' 
password = password2 = password3 = '' 
userPassList=[(username,password),(username2,password2),(username3,password3)] 
print(userPassList) 
[('*me', ''), ('me2', ''), ('me3', '')] 

その後、あなたのプログラミング作業の残りの部分は、より理にかなって。

+0

私はリストを操作していると、それは動作しますが、私が今やろうとしているが第2のタプルを知っていない私を必要とします。パスワード。だからこれは少し難しくなってきました。 – SuperCell

+0

ありがとう私はあなたの言っている私の投稿を編集するつもりを参照してください – SuperCell

0

これは、慣用的な機能pythonでどのように見えるかです:

try: 
    self.conn.sendall(next((name[1:len(name)] for name, _ in userPassList if name.startswith('*'))) 
except StopIteration: 
    pass 
2

あなたはインデックス変数を必要としないように見えます。したがってwhile ... i+=1ではなくfor ... in ...を使用してください。行ってそれと

for tpl in list_of_tpls: 

あなたがやっているだけのようi[0]を使用することができますので、あなたは、あなたのitervalueとしてタプルを持っています。おそらく、それを複数回参照するので、ローカル変数にその変数を格納することをお勧めします。それはより速くなるでしょう、明確です。

username = tpl[0] 

文字列は配列/リスト/タプルとして扱われます。これらの文字列は索引付けできます。最初の文字の値を確認する方法は、.startswith()または[0]のいずれかを使用する方法です。

if username.startswith('*'): 
    # ... or ... 
    if username[0] == '*': 

あなたは残りの部分を持っていると思います。

+0

私はtpl thoを持っていません。このケースでは、タプルの最初の要素だけがあります。 – SuperCell

+0

もちろんタプルがあります。タプルのリストの各要素はタプルです。 –

+0

再びtplは存在しますが、タプルの内容はわかりません。タプルの最初の要素のみ。私は第二の要素が何であるか分からない。 – SuperCell

1

これは、慣用的なPythonでどのように見えるかです:

# Loop through the list until first hit. 
for username, password in userPassList: # Unpack the tuple as we fetch it. 
    if username.startswith('*'): # No mucking with indexes. 
    self.conn... # whatever 
    break # We only need the first username 
+0

それは素晴らしいですが、私はパスワードが何であるか知りません。とにかく私はユーザー名、_ userPassListで言うことができますか? – SuperCell

+0

はい、タプルの構造を解除するときに気にしない変数に '_'を使うことができます。特殊な構文ではなく、通常の識別子です。 (また、Python REPLでは、最後に明示された式の値が割り当てられています。)あなたの例のデータ構造から「パスワード」を取り出しました。 – 9000

関連する問題