在python中组合和循环

2024-06-01 09:41:12 发布

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

first_name = ["Johnny", "Joseph", "Mary"]
third_name = ["Mendez", "Nash", "Johanson"]
second_name = ["John", "Allen", "Ann"]


for i in first_name:
    for x in second_name:
        for y in third_name:
            names = i + x + y

我们如何进行输出:

[Johnny John Mendez, Joseph Allen Nash, Mary Ann Johanson]

因为当我循环浏览所有的列表时,我会得到混乱的名字。我们怎样才能确定名字的顺序。first_name second_name third_name?你知道吗


Tags: nameinforjohnfirstsecondmaryann
3条回答

使用^{}^{}

map(" ".join, zip(first_names, second_names, third_names))

REPL中的示例:

>>> map(" ".join, zip(["A", "B", "C"], ["a", "b", "c"], ["1", "2", "3"]))
['A a 1', 'B b 2', 'C c 3']

然后您可以创建一个可能在其他地方使用的函数:

def make_names(first_names, second_names, third_names):
    return map(" ".join, zip(first_names, second_names, third_names))

或者更一般的不是硬编码确切的三个名称部分:

def make_names(*args):
    return map(" ".join, zip(*args))

REPL示例:

>>> make_names(["a"])
['a']
>>> make_names(["a"], ["b"])
['a b']
>>> make_names(["a"], ["b"], ["c"], ["d"])
['a b c d']
>>> make_names(["Johnny", "Joseph", "Mary"], ["Mendez", "Nash", "Johanson"], ["John", "Allen", "Ann"])
['Johnny Mendez John', 'Joseph Nash Allen', 'Mary Johanson Ann']

如果列表大小不相等,这将起作用

In [18]: import itertools
In [19]: [x for x in itertools.chain.from_iterable(itertools.izip_longest(first_name,second_name,third_name)) if x]
Out[19]:["Johnny","John Mendez","Joseph", "Allen", "Nash", "Mary", "Ann", "Johanson"] 

使用^{}

for first, second, third in zip(first_name, second_name, third_name):
    print "{} {} {}".format(first, second, third)

zip函数同时遍历三个列表,并在每次迭代时从每个列表中获取相应的元素。你知道吗

相关问题 更多 >