你如何检查列表中第一个元组的第一个字母?

时间:2017-03-03 01:27:01

标签: python list tuples

所以我有类似的东西

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

但这不太正确。有什么想法或建议吗?

编辑:我没有密码只是用户名。

5 个答案:

答案 0 :(得分: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] == '*':

arraysMatch = true;

if (arrayOne.length !== arrayTwo.length) {
  arraysMatch = false;
} else {
  for (var i = 0; i < arrayOne.length; i++) {
    // Use JSON.stringify to get deterministic strings of non-primitives 
    var currVal1 = JSON.stringify(arrayOne[i]);
    var currVal2 = JSON.stringigy(arraytwo[i]);
    if (currVal1 !== currVal2) {
      arraysMatch = false;
      break; // No reason to keep going through the loop any more
    }
  }
}

我认为你已经完成了剩下的工作。

答案 1 :(得分: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', '')]

然后你的其余编程工作会更有意义。

答案 2 :(得分:1)

这就是它在惯用Python中的表现:

void print() {
    printf("just for test");
    fflush(stdout);
}

答案 3 :(得分:0)

i = i + 1需要在if块之外,而不是[:1]你可以使用[0]

答案 4 :(得分:0)

这就是它在惯用函数python中的表现:

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