2017-03-03 1 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

및 작동,하지만 내가 지금 할 노력하고있어 것은 두 번째 튜플을 모르는 저를 필요로; 비밀번호. 그래서 이것은 그것을 조금 더 어렵게 만들었습니다. – SuperCell

+0

고마워요 내 말 편집 내 게시물을 편집 할 참조하십시오 – SuperCell

0

이는 관용적 기능 파이썬의 모습입니다 :

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 ...을 사용하십시오. 그 짓을하면 당신이 일을 한 것처럼 i[0]을 사용할 수 있도록

for tpl in list_of_tpls: 

, 당신은, 당신의 itervalue 같은 튜플을해야합니다. 로컬 변수에 두 번 이상 참조하기 때문에 아마도 그 변수를 로컬 변수에 저장해야합니다. 더 빠를 것입니다. 이 더 명확합니다.

username = tpl[0] 

문자열은 배열/목록/튜플로 처리됩니다. 색인을 생성 할 수 있습니다. 첫 번째 문자의 값을 확인하는 방법은 .startswith() 또는 [0]입니다.

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

나머지는 있습니다.

+0

나는 tpl tho. 이 경우 튜플의 첫 번째 요소 만 사용자 이름 – SuperCell

+0

을 가지고 있습니다. 물론 튜플이 있습니다. 튜플 목록의 각 요소는 튜플입니다. –

+0

다시 tpl은 존재하지만 터플이 무엇인지 알지 못합니다. 튜플의 첫 번째 요소 만. 나는 두 번째 요소가 무엇인지 모른다. – SuperCell

1

이것은 관용적 파이썬의 모습입니다 : 나는 목록을 조작 한

# 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

그렇습니다. 터플 등을 파괴 할 때 신경 쓰지 않는 변수에'_'을 사용할 수 있습니다. 특수한 구문이 아니라 일반적인 식별자라는 것을 기억하십시오. (또한 파이썬 REPL에서는 마지막으로 표현한 표현식의 값이 할당됩니다.) 예제의 데이터 구조에서 '암호'를 가져 왔습니다. – 9000