所以我有类似的东西
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 :(得分: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