【问题标题】:Print both list returned by a single function [duplicate]打印单个函数返回的两个列表[重复]
【发布时间】:2021-04-26 05:54:20
【问题描述】:

我正在尝试打印单个函数返回的两个列表。我不断得到:

ValueError:解包的值太多(预计 2 个)

def foods(x):
    fruits = []
    vegetables = []
    # code
    return fruits, vegetables

for food1, food2 in foods(x):
    print(food1+" "+food2)

如果我使用in foods(x)[0]in foods(x)[1],我可以将它们单独打印出来,但我会尝试同时打印它们。

【问题讨论】:

  • 链接的答案没有回答问题。问题不在于打印语句 - 您可以像这样打印两个列表: print([1,2,3]+[4,5])

标签: python list function for-loop


【解决方案1】:

只需使用逗号:

print(food1, foo2)

will automatically show the items separated with a space(无论sep 设置为什么,但默认情况下这是一个空格)。

Python 不是 Java(或 javascript 或 PHP),当您将字符串添加到其他内容时,它不会隐式地将内容转换为字符串。如果您想要这样的转换(通常不需要),您必须手动进行。

顺便说一句,你的 sn-p 仍然无法工作:

for food1, food2 in foods(x):

表示foods 的结果是长度为2 的可迭代的可迭代。但foods 只是返回一个元组,所以应该是

food1, food2 = foods(x)

或者,如果foods 应该返回一对蔬菜和水果,您需要构造这些对:return a, b 将返回一对两个可迭代对象,以返回一个可迭代对象你需要zip()他们在一起:

return zip(fruits, vegetables)

在这种情况下,您的迭代将起作用。

【讨论】:

    【解决方案2】:

    如果水果和蔬菜大小相同:

    def foods(x):
        fruits = ["apple","banana","orange"]
        vegetables = ["tomato","mushrooms","beans"]
        return fruits, vegetables
    
    my_fruits, my_vegetables = foods(x)
    for food1, food2 in zip(my_fruits, my_vegetables):
        print(food1+" "+food2)
    

    输出

    apple tomato
    banana mushrooms
    orange beans  
    

    否则:

    from itertools import zip_longest
    def foods(x):
        fruits = ["apple","banana","orange"]
        vegetables = ["tomato","mushrooms"]
        return fruits, vegetables
    
    my_fruits, my_vegetables = foods(x)
    for food1, food2 in zip_longest(my_fruits, my_vegetables):
        print(food1,food2)
    

    输出:

    apple tomato
    banana mushrooms
    orange None
    

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 1970-01-01
      • 2011-04-18
      • 2011-03-09
      • 1970-01-01
      • 2017-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多