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

你似乎並不需要一個索引變量。所以使用for ... in ...而不是while ... i+=1

for tpl in list_of_tpls: 

做完這些後,你就會有一個元組爲您itervalue,所以你可以使用i[0]就像你一直在做。您應該繼續並將其存儲在本地變量中,因爲您多次引用它。它會更快,更清晰。

username = tpl[0] 

字符串被視爲數組/列表/元組:它們可以被索引。檢查第一個字符的值的方法是使用.startswith()[0]

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

我想你已經休息了。

+0

我沒有tpl壽。在這種情況下,我只有元組的第一個元素用戶名 – 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中,它被分配了最後一個表達式的值。)我從你的例子中的數據結構中獲取了'password'。 – 9000