【问题标题】:How to print a string in a list and its index on the same line?如何在同一行打印列表中的字符串及其索引?
【发布时间】:2014-03-11 00:56:14
【问题描述】:

这可能有一个非常简单的解决方案,但我只是一个初学者。

我拥有的是:

def content(L):  
    for i in range(len(L)):  
        print (i), (L[i])

现在它只打印索引而不是字符串。我不完全确定问题出在哪里,但是当我在最后一行切换排序以便 (L[i]) 排在第一位时,它会打印字符串而不是索引。我想在同一行打印。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    在 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 及更高版本)导入 print,则可以在 Python 2 中将其用作 Python 3.x 样式的函数:

    from __future__ import print_function
    

    【讨论】:

    • 我有一种感觉,就是这么简单。谢谢!
    【解决方案2】:

    在 Python 3.x 中,print 是一个函数。因此,您必须像这样将两个值作为参数传递

    print (i, L[i])
    

    当你说

    print (i), (L[i])
    

    Python 3.x 接受i 作为print 的参数,并将(L[i]) 视为一个单独的表达式并对其进行评估,但这不会传递给print 函数。这就是为什么总是打印第一个元素。

    除此之外,您的整个语句将被评估为以下元组

    (None, L[i])
    

    要理解这一点,请在 Python REPL 中尝试类似的操作

    >>> print (1), (2)
    1
    (None, 2)
    

    当内部print1 被执行时,它将返回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 对应于元组构造,由于我们不使用它,它会立即被丢弃。

    【讨论】:

      【解决方案3】:
      def content(L):  
          for ind, val in enumerate(L):  
              print (ind, val)
      

      【讨论】:

        【解决方案4】:

        正如其他人所说,print 现在是一个函数,所以 python 正在做的是解释该行: print(i), (L[i]) 作为一个元组。请改用print(i, L[i])

        您还需要使用枚举:

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

        【讨论】:

          猜你喜欢
          • 2019-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-14
          • 1970-01-01
          • 1970-01-01
          • 2016-07-13
          • 1970-01-01
          相关资源
          最近更新 更多