Python 3 |在for循环中使用多个if语句?
我找遍了,没有找到适合我需要的东西 我有三个Python 3 |在for循环中使用多个if语句?,python,if-statement,Python,If Statement,我找遍了,没有找到适合我需要的东西 我有三个for循环,每个循环中都有一个if条件。代码如下: for friend in friends: columns = friend.split("\n") if len(columns) == 4: c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `no_of_new_posts`, `already_friends`) VALU
for
循环,每个循环中都有一个if
条件。代码如下:
for friend in friends:
columns = friend.split("\n")
if len(columns) == 4:
c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `no_of_new_posts`, `already_friends`) VALUES (?, ?, ?, ?)""", (columns))
for friend in friends:
columns = friend.split("\n")
if len(columns) == 3:
c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `already_friends`) VALUES (?, ?, ?)""", (columns))
for friend in friends:
columns = friend.split("\n")
if len(columns) == 2:
c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `already_friends`) VALUES (?, ?, ?)""", (columns))
有没有更有效的方法?我想到了和操作符,就像这样:
for friend in friends:
columns = friend.split("\n")
if len(columns) == 4:
c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `no_of_new_posts`, `already_friends`) VALUES (?, ?, ?, ?)""", (columns))
and
if len(columns) == 3:
c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `already_friends`) VALUES (?, ?, ?)""", (columns))
and
if len(columns) == 2:
c.execute("""INSERT INTO `fb_friends`(`name`, `already_friends`) VALUES (?, ?)""", (columns))
与在同一个列表上重复三次相比,有人能建议最好或最有效的方法吗?您正在寻找if/elif/else
:
if len(smth) == 5:
# do this
elif len(smth) == 6:
# do that
else:
# do something else
您正在查找if/elif/else
:
if len(smth) == 5:
# do this
elif len(smth) == 6:
# do that
else:
# do something else
完整代码如下:
for friend in friends:
columns = friend.split("\n")
if len(columns) == 4:
c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `no_of_new_posts`, `already_friends`) VALUES (?, ?, ?, ?)""", (columns))
elif len(columns) == 3:
c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `already_friends`) VALUES (?, ?, ?)""", (columns))
elif len(columns) == 2:
c.execute("""INSERT INTO `fb_friends`(`name`, `already_friends`) VALUES (?, ?)""", (columns))
完整代码如下:
for friend in friends:
columns = friend.split("\n")
if len(columns) == 4:
c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `no_of_new_posts`, `already_friends`) VALUES (?, ?, ?, ?)""", (columns))
elif len(columns) == 3:
c.execute("""INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `already_friends`) VALUES (?, ?, ?)""", (columns))
elif len(columns) == 2:
c.execute("""INSERT INTO `fb_friends`(`name`, `already_friends`) VALUES (?, ?)""", (columns))
在ForceBru的答案上,哪一个是最干净的。。。这是另一个有趣的选择
d = {2: """INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `already_friends`) VALUES (?, ?, ?)""",
3: """INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `already_friends`) VALUES (?, ?, ?)""",
4: """INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `no_of_new_posts`, `already_friends`) VALUES (?, ?, ?, ?)"""}
for friend in friends:
columns = friend.split("\n")
try:
c.execute(d[len(columns)], (columns))
except KeyError:
print("you sure about this columns length which was:", len(columns))
在ForceBru的答案上,哪一个是最干净的。。。这是另一个有趣的选择
d = {2: """INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `already_friends`) VALUES (?, ?, ?)""",
3: """INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `already_friends`) VALUES (?, ?, ?)""",
4: """INSERT INTO `fb_friends`(`name`, `no_of_mutual_friends`, `no_of_new_posts`, `already_friends`) VALUES (?, ?, ?, ?)"""}
for friend in friends:
columns = friend.split("\n")
try:
c.execute(d[len(columns)], (columns))
except KeyError:
print("you sure about this columns length which was:", len(columns))
您可以避免使用if语句,并将列的大小改为4:列+[None]*(4列(列))
我发现您使用(列)
极易误导。它不起任何作用(您可以将(columns)
替换为columns
,并且不会发生任何变化),但它类似于(columns,)
(请注意最后的逗号!),它创建了一个1元素元组……您可以避免使用if语句并将columns
填充为大小4:columns+[None]*(4-len(columns))
我发现您使用的(列)
极易误导。它什么都不做(你可以用列
替换(列)
,什么都不会改变),但它类似于创建一个单元素元组的(列,)
(请注意最后的逗号!)。感谢MaRZoCHi,这正是我所需要的。我选择了正确的答案,因为它在示例中使用了我的原始代码。谢谢MaRZoCHi,这正是我所需要的。我选择了正确的答案,因为它在示例中使用了我的原始代码感谢ForceBru正是我所需要的。感谢ForceBru正是我所需要的。只是要指出,ForceBru和MaRZoCHi的答案基本相同,只是MaRZoCHi对我的代码更为具体,例如,ForceBru使用的数字5和6永远不会是任何列的长度。。您的错误处理程序是一个很酷的添加,但如果代码不允许任何错误,则不需要它:/但是+1用于dict
Marzochi的答案在我发布时不在那里:)因此没有将他们的答案相互比较,而是将Forcebru的答案与我的答案进行比较:)。谢谢,如果你不需要try/的保护,除非你总是可以删除它:)。我要指出的是,ForceBru和MaRZoCHi的答案基本相同,只是MaRZoCHi对我的代码更具体,例如ForceBru使用的数字5和6永远不会是任何列的长度。。您的错误处理程序是一个很酷的添加,但如果代码不允许任何错误,则不需要它:/但是+1用于dict
Marzochi的答案在我发布时不在那里:)因此没有将他们的答案相互比较,而是将Forcebru的答案与我的答案进行比较:)。谢谢,如果您不需要try/的保护,除非您总是可以删除它:)。我正在努力理解这段代码,但是如果我的逻辑正确,这里的最后一行将导致字段的长度等于lenc
?但是当len(columns)==2时,我需要删掉“没有共同的朋友”
”和“没有新的帖子”
“没有”没有新的帖子”
”和“已经有朋友了”
”。我总是有名字和朋友,但不总是有其他SSOFIEDS[:lenc]所以字段[:lenc]做这个字段[:2]从0包括到2排除:“name
”,“no_of u mutual_friends
”如果你总是有“name
”和“已经有朋友了”
”你必须更改字段列表的顺序如果已经有朋友了,你可以使用其他结构:字段[:lenc-1]+字段[-1:]我正在努力理解这段代码,但是如果我的逻辑正确,这里的最后一行将导致字段的长度
等于lenc
?但是当len(columns)==2时,我需要删掉“没有共同的朋友”
”和“没有新的帖子”
“没有”没有新的帖子”
”和“已经有朋友了”
”。我总是有名字和朋友,但不总是有其他SSOFIEDS[:lenc]所以字段[:lenc]做这个字段[:2]从0包括到2排除:“name
”,“no_of u mutual_friends
”如果您始终拥有“name
”和“已拥有的朋友”
”,则必须更改字段列表中的顺序如果已拥有的朋友始终在最后,则可以使用其他结构:字段[:lenc-1]+字段[-1:]