【问题标题】:Combining two lists of strings together once in Python 3.4.3在 Python 3.4.3 中将两个字符串列表组合在一起一次
【发布时间】:2015-12-20 02:15:33
【问题描述】:

我正在尝试合并一个名字和姓氏的列表,但没有运气。我的代码目前是这样的:

firstname=['Tom','Dick','Steve']
surname=['Johnson','Smith','Doe']
for f in (firstname):
    for s in (surname):
        print(f,s)

这给了我这样的东西:

Tom Johnson
Tom Smith
Tom Doe
Dick Johnson

等等,当我真正想要的时候:

Tom Johnson
Dick Smith
Steve Doe

非常感谢像我这样的初学者。

【问题讨论】:

  • 只是压缩列表一起
  • 仅此一项不会给他指定格式的输出。

标签: python string list loops zip


【解决方案1】:
for name, surname in zip(firstname, surname):
   print(name, surname)

【讨论】:

  • 谢谢!这非常有效。是否也可以使用 zip 向后迭代?
  • @Matsern 使用reverse 进行反转,但您需要一个序列,而zip 返回一个迭代器。所以首先将迭代器消费到一个列表中,然后调用reverse:reversed(list(zip(firstname, surname)))
  • 您可以使用过于老式的 while 循环,但您可以以不同的方式控制(打印)列表中的元素,因为您正在谈论反向。谢谢!!
  • @ThijsvanDien 感谢您的回答,但我发现 zip(name, reversed(surname)) 在我的情况下效果最好。留给后代吧。
【解决方案2】:

Zip 是在 python 中将两个列表组合在一起的方法。所以,作为一个函数,

def combine_names(first, last):
    comb = zip(first, last)
    for f,l in comb:
        print f,l

【讨论】:

    【解决方案3】:

    假设两个列表的长度相同,您可以对其进行迭代并在两者上使用相应的索引:

    for i in range(len(firstname)):
        print (firstname[i], surname[i])
    

    【讨论】:

    • 这不是 Python 的方式——这就是“zip”的用途。
    【解决方案4】:
    firstname=['Tom','Dick','Steve']
    surname=['Johnson','Smith','Doe']
    i = 0
    while i<min(len(firstname), len(surname)):
        print (firstname[i], surname[j])
        i += 1
    

    【讨论】:

    • 为什么级别这么低?
    • @ThijsvanDien 是的,它非常老式,从他的问题来看,他缺少嵌套循环的基本概念。我猜他是编程新手。所以发布了这个经典而机械的while循环:)
    • 我很欣赏你的意图,但老实说,我发现这段代码相当混乱。列表同样长; (即使他们不是)为什么要使用两个循环呢?您示例中的外部循环没有任何用途。
    • 谢谢你,我已经更新了。我删除了外部,因为列表的长度保持相等,我想这不会是一个问题。是不是太混乱了?你想让我删除这个答案吗?
    • 由于ij 总是相等的,您可以只使用i。要考虑可能的长度差异,您可以使用while i &lt; min(len(firstname), len(surname))。但是你也可以使用for 循环。然后你不妨完全放弃索引......你会看到这会导致什么。我不介意不同的实现,但实际上在这种情况下它是不必要的复杂化。我不确定这对 OP 有多大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多