如何在同一行打印字符串及其索引?
这可能有一个很简单的解决办法,但我还是个初学者。
我现在有的代码是:
def content(L):
for i in range(len(L)):
print (i), (L[i])
现在它只打印出索引,而不是字符串。我不太确定问题出在哪里,但当我把最后一行的顺序调换,把(L[i])放在前面时,它就打印出字符串,但不打印索引。我想要在同一行上同时打印这两个内容。
4 个回答
1
def content(L):
for ind, val in enumerate(L):
print (ind, val)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
1
正如其他人所说,print
现在是一个函数,所以Python会把这一行:print(i), (L[i])
当作一个元组来处理。你应该改成这样:print(i, L[i])
。
你还可以使用一个叫做enumerate的东西:
for i,line in enumerate(L):
print(i, line)
5
在Python 3.x中,print
是一个函数。所以,你需要像这样把值作为参数传进去
print (i, L[i])
当你说
print (i), (L[i])
在Python 3.x中,print
接受i
作为参数,并把(L[i])
当作一个单独的表达式来计算,但这个结果并没有传给print
函数。这就是为什么总是打印出第一个元素的原因。
除此之外,你整个语句会被计算成下面这个元组
(None, L[i])
为了理解这一点,可以在Python的交互式环境中试试这个
>>> print (1), (2)
1
(None, 2)
当内部的print
执行1
时,它会返回None
,然后下一个元素是2
。在Python中,当你写两个用逗号分开的表达式,并放在括号里时,它们会变成一个元组。
你可以通过Python生成的字节码来确认这一点,像这样
from dis import dis
code1 = compile("print (1), (2)", "<string>", "exec")
dis(code1)
输出
1 0 LOAD_NAME 0 (print)
3 LOAD_CONST 0 (1)
6 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
9 LOAD_CONST 1 (2)
12 BUILD_TUPLE 2
15 POP_TOP
16 LOAD_CONST 2 (None)
19 RETURN_VALUE
BUILD_TUPLE
对应于元组的构建,因为我们没有使用它,所以它会立即被丢弃。