" TypeError:只能加入一个可迭代的"尝试将列表条目添加到字符串时

时间:2017-11-25 20:16:24

标签: python python-3.x list object join

我有一个有两个列表作为变量的类。它有一个对象,它应该将列表中的每个元素添加到(相当冗长的)字符串中,然后返回到主程序,最后通过打印。我使用for循环遍历列表并使用.join()将每个对象添加到字符串中,但我得到一个TypeError:"只能加入一个可迭代的"

这些清单包含在餐馆购买的商品的价格,所以只是浮动数字。

Class A:

    def __init__(self, etc.):
        self.__foods = []
        self.__drinks = []

然后我有一个对象应该以预定的形式打印收据,然后将其作为字符串传递给主程序。

Class A:
    ...

    def create_receipt(self):
        food_price_string = "" # What is eventually joined to the main string
        food_prices = self.__foods # What is iterated

        for price in food_prices:
            food_price_string.join(price) # TypeError here
            food_price_string.join("\n")  # For the eventual print

在这里我得到了TypeError - 程序拒绝加入'价格'变量到上面创建的字符串。我也应该为饮料价格做同样的事情,然后两者都将加入到其余的字符串中:

1 个答案:

答案 0 :(得分:5)

这里有两个问题:

  1. str.join 不会改变字符串(字符串是不可变的),返回一个新字符串;和
  2. 它将连接在一起的可迭代字符串作为输入,而不是一起添加单个字符串。
  3. food_prices可迭代这一事实并不重要,因为您使用for循环,price s是food_prices的元素,因此您加入列表中的单个项目。

    您可以重写程序,如:

    def create_receipt(self):
        food_prices = self.__foods
        food_price_string = '\n'.join(str(price) for price in food_prices)
        food_price_string += '\n'  # (optional) add a new line at the end
        # ... continue processing food_price_string (or return it)