[英]Better way for taking multiple inputs with a for loop?
我想使用 for 循环来获取我必须接收的许多问题的输入。 我设法编写了一些代码,但似乎应该有更好的方法。 也许我可以减少我使用的变量数量?
## <Desired Result>
## onset : 3mo
## location : earth
## character : red
checks = ['onset','location','character']
l1 = ['onset','location','character']
l2 = ['onset','location','character']
for i in range(len(checks)):
l2[i] = input(checks[i])
for i in range(len(checks)):
print(l1[i]+" : "+l2[i])
关于您的代码的一些观察:
请注意,您实际上从未更改过l1
因此基本上没有必要更改它,并且无论您在哪里使用l1
替换checks
。
不必以这种方式定义l2
因为无论如何您都要覆盖它的所有值,因此您只需定义l2 = []
,然后在循环中使用append
:
for i in range(len(checks)): l2.append(input(checks[i]))
两个循环的范围完全相同,因此可以将它们组合为1:
for i in range(len(checks)): l2[i] = input(checks[i]) print(l1[i]+" : "+l2[i])
现在,使用list-comprehension和字符串的join
方法,您实际上可以将此代码减少到3行(并摆脱l1
):
checks = ['onset', 'location', 'character']
l2 = [input(x) for x in checks]
print("\n".join(checks[i]+" : "+l2[i] for i in range(len(checks))))
或更整洁地使用zip
:
print("\n".join(check + " : " + ans for check, ans in zip(checks, l2)))
最后,减少更多的行(并摆脱l2
):
checks = ['onset', 'location', 'character']
print("\n".join(check + " : " + input(check) for check in checks))
我们还可以避免使用join
并利用机会使用print
的额外参数和list-unpacking进一步减少到一行(摆脱checks
):
print(*(check + " : " + input(check) for check in ['onset', 'location', 'character']), sep='\n')
对于真正的for循环一线解决方案,您可以像这样进行列表理解:
l2 = [(n, print(l1[i]+" : "+n))[0] for i, n in enumerate([input(x + ": ") for x in checks])]
输出继电器:
onseta
locationb
characterc
onset : a
location : b
character : c
编辑
正如其他人提到的那样,这不是最佳做法,因此请使用以下方法:
checks = ['onset','location','character']
l2 = [input(f"Check {n}:\n > ") for n in checks]
print(*(f"{j}: {l2[i]}\n" for i, j in enumerate(checks)), sep="")
输出:
Check onset:
> ok
Check location:
> ok
Check character:
> ok
onset: ok
location: ok
character: ok
您不应初始化所需长度的列表并为每个元素输入内容。 您可以使用append
方法。
以下代码将帮助您:
checks = ['onset','location','character']
arr = []
for i in checks:
arr.append(input(i + ' : '))
如果要减少行数,可以尝试以下操作:
arr = [ input(i + ' : ') for i in ['onset','location','character']]
尝试这个:
answer_tuples = [(question, input("Input answer for question " + question + ": ")) for question in checks]
这基本上是其他人建议的内容,不同之处在于我使用列表理解来question, answer
元组(以防万一您要打印或在路上使用它们)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.