【问题标题】:Python: Print all items in list in one statementPython:在一个语句中打印列表中的所有项目
【发布时间】:2019-04-23 23:08:42
【问题描述】:

我当前的代码循环通过 list 并打印项目 ii+1 彼此相邻。但是,这会导致如下代码:

for i in list:
    print(str(i) + ': ' + str(i+1))

此代码用于打印每个项目,但出于与项目相关的原因,它们都需要在一个 print 语句中,如果手动完成,则会显示为:

print(str(i) + ': ' + str(i+1) + '\n' + str(i+2) + ': ' + str(i+3) + '\n'...)

这很荒谬,而且也不使用迭代来循环列表,这意味着必须为列表中的每个项目添加它。

因此,我的问题是,如何以这种方式进行递归,其中项目 ii+1 被打印,然后项目 i+2i+3 在同一语句的下一行,等等?

详细说明“项目相关原因”: 该项目涉及到 Discord 模块,需要将信息导出为一条在频道中发送的消息。这意味着我不能遍历每个并打印它,因为这会为列表中的每个项目发送一条新消息。

【问题讨论】:

  • 你能解释一下为什么它必须在一份印刷声明中吗?你可以在循环中创建一个字符串然后打印它吗?在没有更多信息的情况下,这里的任何人都很难给你一个解决这种任意约束的建议。
  • 请注意,这是迭代,而不是递归。
  • 您的第一个代码不等于您的第二个代码。另外,您为什么不想遍历列表?

标签: python python-3.x


【解决方案1】:

首先,尽量不要使用list作为变量名!其次,您可以编写一个生成器函数,该函数遍历列表 arr(从 0 或 1 开始)和 join 中的每个第二项到一个空字符串:

arr=[1,2,3,4,5,6,7,8]
print( ''.join("{0}: {1}\n".format(i,k)  for i,k in zip(arr[0::2], arr[1::2])) )

根据要求,这会产生“项目 i 和 i+1 […],然后是下一行的项目 i+2 和 i+3”:

1: 2
3: 4
5: 6
7: 8

然而,这与您的初始代码不同,因此您可能更愿意指“项目 i 和 i+1 [...],然后是项目 i+1 和 i+2 在下一行:

print( ''.join("{0}: {1}\n".format(i,k)  for i,k in zip(arr[0:], arr[1:])) )

【讨论】:

  • 第一个例子完美运行!现在我只需要弄清楚它是如何工作的,这样我下次就可以自己做。谢谢!
【解决方案2】:
print(':'.join((str(i) for i in list)))

或者这个

print(''.join(( str(i)+(':'if not i%2 else '\n') for n,i in enumerate(list) )))

【讨论】:

  • TypeError: 'type' 对象不可迭代
  • @alec_a 将list 更改为列表名称。 'list 是一种类型。
  • 这很有效。但是,它在列表中的每个项目之间使用:。有什么方法可以交替使用':''\n'
  • @NoiseGenerator 检查第二个例子
【解决方案3】:

你不想

list_value = ['a','b','c','d','e']
print('\n'.join(('{}: {}'.format(list_value[i],list_value[i+1]) for i in range(len(list_value)-1))))

这给出了:

a: b
b: c
c: d
d: e

而不是@user1438644 的回答

print(':'.join((str(i) for i in list_value)))

给出:

a:b:c:d:e

【讨论】:

    【解决方案4】:

    这样的东西会将你的输出存储在一个字符串中

    output = ''
    
    odd, even = mylist[::2], mylist[1::2]
    
    for i in range(len(even)):
        output += '{}: {}\n'.format(odd[i], even[i])
    print(output)
    

    【讨论】:

    • 除非它实际上不会运行,因为i 是列表的元素,i+1 是添加了整数 1 的同一元素,而不是下一个元素
    • 感谢@macaw_9227 指出这一点。我已经对其进行了编辑以解决此问题:)
    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多