使用多个列表中的值设置Python字符串格式

2024-09-30 18:14:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用多个列表中的值格式化字符串。以下是伪代码,但应该给出预期输出的概念。结果是每个列表中每一项的组合:每个人都喜欢在做所有爱好的同时吃所有的水果。那么如何在python中实现这一点呢?在

应该有len(names)*len(fruits)*len(hobbies)个可能性(在我的例子中是64个)

names = ['tom','marry','jessica','john']
fruits = ['oranges','apples','grapes','bananas']
hobbies = ['dancing','sitting','bicycling','watching tv']

print '%(name)s likes to eat %(fruit)s while %(hobby)s \n'
       % {'name':names, 'fruit':fruits, 'hobby':hobbies}

Tags: 字符串代码name概念列表lennames可能性
3条回答

只需使用for循环:

names = ['tom','marry','jessica','john']
fruits = ['oranges','apples','grapes','bananas']
hobbies = ['dancing','sitting','bicycling','watching tv']

for name in names:
    for fruit in fruits:
        for hobby in hobbies:
            print '%(name)s likes to eat %(fruit)s while %(hobby)s' \
                   % {'name': name, 'fruit': fruit, 'hobby': hobby}

但是,如果你问我,我总觉得用^{}会让一切看起来更好:

^{pr2}$

如果我理解你的“输出将是每个列表中每一项的组合:每个人在做每一项爱好时都喜欢所有的水果”这句话,你就想要所有可能的组合。可以使用嵌套循环的方式执行此操作:

names = ['tom','mary','jessica','john']
fruits = ['oranges','apples','grapes','bananas']
hobbies = ['dancing','sitting','bicycling','watching tv']

for name in names:
    for fruit in fruits:
        for hobby in hobbies:
            print '%(name)s likes to eat %(fruit)s while %(hobby)s' % {'name':name, 'fruit':fruit, 'hobby':hobby}

产生

^{pr2}$

或者您可以使用itertools模块,该模块有一个函数product,该函数提供了输入列表的所有可能组合:

import itertools

for name, fruit, hobby in itertools.product(names, fruits, hobbies):
    print '%(name)s likes to eat %(fruit)s while %(hobby)s' % {'name':name, 'fruit':fruit, 'hobby':hobby}

itertools模块提供product函数,该函数生成所有可能的元组:

>>> from itertools import product
>>> names = ['tom','marry','jessica','john']
>>> fruits = ['oranges','apples','grapes','bananas']
>>> hobbies = ['dancing','sitting','bicycling','watching tv']
>>> for n, f, h in product(names, fruits, hobbies):
...     print '%s likes to eat %s while %s' % (n, f, h)

也可以直接使用元组:

^{pr2}$

相关问题 更多 >