【问题标题】:I am trying to format 2d list items into a string我正在尝试将 2d 列表项格式化为字符串
【发布时间】:2020-11-09 10:32:22
【问题描述】:

我正在做一个足够简单的任务,尝试使用二维列表中的项目写出一条消息,如下所示

catalogue = [["Lenova Yoga Tablet", 4000], ["Macbook Air", 8000], ["Apple iPad", 500], ["Samsung Galaxy A7", 200]]

for i in catalogue:
   print("{}. {}, {}".format(str(i+1), catalogue[i][0], str(catalogue[i][1])))

我收到一条错误消息,内容如下:

TypeError:只能将列表(不是“int”)连接到列表

似乎我想在列表中添加一些东西。请注意,我已经有几年没有编码了,所以可能语法已经改变,或者我只是错过了一些非常明显的东西。

【问题讨论】:

  • 您的icatalogue 的子列表(即["Lenova Yoga Tablet", 4000]),您正在向其中添加int。也许你想要for i, n in enumerate(catalogue)

标签: python python-3.x list multidimensional-array


【解决方案1】:

使用enumerate。如果你想从1开始使用enumerate(catalogue, 1)

例如:

catalogue = [["Lenova Yoga Tablet", 4000], ["Macbook Air", 8000], ["Apple iPad", 500], ["Samsung Galaxy A7", 200]]

for i, value in enumerate(catalogue):
    print("{}. {}, {}".format(i, value[0], value[1])) 

或者通过解包子列表中的项目

例如:

for i, (item, price) in enumerate(catalogue):
    print("{}. {}, {}".format(i, item, price)) 

输出:

0. Lenova Yoga Tablet, 4000
1. Macbook Air, 8000
2. Apple iPad, 500
3. Samsung Galaxy A7, 200

【讨论】:

  • 枚举一个内置函数以供将来参考。我大约 4 年前学习了 pyhton,并在 2 年前停止了编码,据我所知,对于类似的事情,我从来不需要使用枚举函数。如果你不介意我问的话,从那时到现在发生了什么变化。
  • 是的。 enumerate 是一种内置方法。 docs.python.org/3/library/functions.html#enumerate
【解决方案2】:

我们迭代catalogue 然后我们迭代那个迭代——我们要确保当元素多于或少于 3 个时程序不会崩溃。最后,我们使用join() 函数来打印结果。

catalogue = [["Lenova Yoga Tablet", 4000], ["Macbook Air", 8000], ["Apple iPad", 500], ["Samsung Galaxy A7", 200]]

for i in catalogue:
    temp = []
    for j in i:
       temp.append(str(j))
    print(''.join(temp))

【讨论】:

  • 该代码打印出以下内容:“Lenova Yoga Tablet、Lenova Yoga Tablet4000、Macbook Air、Macbook Air8000、Apple iPad、Apple iPad500 Samsung Galaxy A7、Samsung Galaxy A7200” python 中更复杂的东西,因为我有一段时间没有编码并且不太了解这段代码。您能否解释一下为什么会发生这种情况以及我该如何解决这个问题。撇号是一个新行,我只是很难格式化评论
  • 它将一个嵌套列表的所有元素打印在 1 个字符串中。首先,我们遍历catalogue 以访问嵌套列表。我们创建一个空列表temp 然后我们迭代嵌套列表并将其中的每个元素附加到temp。这也可以使用列表理解temp = [str(x) for x in i] 来完成。毕竟,元素被附加到temp 我们正在使用join() 函数连接所有元素in-line,因为我们在开头添加了''。我们最终打印出来并得到了结果。
  • @UmairAhmed 干得好,接受别人的回答 :)
  • 对不起老兄,我真的很感谢帮助我只是觉得Rakesh的解决方案简单了很多,并帮助我更好地直接解决了问题。感谢您的时间和解释。
  • @UmairAhmed 如果您将format 的答案视为正确答案,请继续使用比现代更糟糕的旧方法接受它:))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多