如何在同一行打印字符串及其索引?

3 投票
4 回答
4401 浏览
提问于 2025-04-17 21:43

这可能有一个很简单的解决办法,但我还是个初学者。

我现在有的代码是:

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对应于元组的构建,因为我们没有使用它,所以它会立即被丢弃。

7

在Python 3.x中,print不再像Python 2.x那样是一个语句,而是变成了一个函数。你可以这样使用它:

print(i, L[i])

另外,enumerate非常适合你想要做的事情:

for i, c in enumerate(L):
    print(i, c)

需要注意的是,如果你从__future__包中导入它(适用于Python 2.6及以上版本),你也可以在Python 2中像Python 3.x那样使用print

from __future__ import print_function

撰写回答