【问题标题】:Function to switch the order of a first and last name切换名字和姓氏顺序的功能
【发布时间】:2020-11-17 00:31:51
【问题描述】:

这就是我想要的。我想我可以使用len 函数,但我找不到任何东西来迭代每个项目,而不仅仅是颠倒列表的顺序。

输入列表:['Tony Hawk', 'Rose Will', 'Humpty Dumpty', 'Jill Mark']

输出列表:['Hawk Tony', 'Will Rose', 'Dumpty Humpty', 'Mark Jill']

【问题讨论】:

  • 用通俗易懂的英文解释你将如何一步步解决问题。
  • 我需要颠倒名字和姓氏的顺序。因此,例如“Tony Hawk”的输入应该有“Hawk Tony”的输出
  • 是的,我完全理解了问题描述。您需要将其分解为更小的步骤才能解决问题。例如,当您查看Tony Hawk 时,您怎么知道Tony 是“名字”而Hawk 是“姓氏”?例如,为什么不是名字Tony Ha 和姓氏wk
  • 您只是在重新陈述要求(您想要的结果是什么)。我们知道那些。 @KarlKnechtel 询问您将采取哪些步骤来解决问题。作为程序员,你会做的事情。就像遍历列表中的名称,在空格字符上拆分它们,交换第一个和最后一个值,用空格重新连接它们。类似的东西。

标签: python function loops reverse


【解决方案1】:

对于列表中的每个元素,在空格处拆分,反转,然后在空格处连接:

def reverse_names(l):
    return [" ".join(reversed(x.split(" "))) for x in l]

print(reverse_names(['Tony Hawk', 'Rose Will', 'Humpty Dumpty', 'Jill Mark']))
# ['Hawk Tony', 'Will Rose', 'Dumpty Humpty', 'Mark Jill']

【讨论】:

  • 非常感谢!!这工作得很好。无论出于何种原因,当我尝试运行反向功能时,它无法识别它,我不确定我做错了什么。再次感谢您
  • 关键是这是反转每个元素,而不是整个列表。
【解决方案2】:

您可以使用以下 for 循环:

result = []
for first_name, last_name in map(str.split, lst):
    result.append(last_name + " " + first_name)

等效 list comprehension:

lst = ['Tony Hawk', 'Rose Will', 'Humpty Dumpty', 'Jill Mark']
result = [f'{last_name} {first_name}' for first_name, last_name in map(str.split, lst)]
print(result)

输出

['Hawk Tony', 'Will Rose', 'Dumpty Humpty', 'Mark Jill']

步骤如下:

  1. 使用mapstr.split按空格map(str.split, lst)分割每个元素
  2. 以相反的顺序加入元素last_name + " " + first_name(或f'{last_name} {first_name}'

第三种选择是使用generator expression 而不是map,但我个人觉得这个选项比较麻烦:

result = [f'{last_name} {first_name}' for first_name, last_name in (s.split() for s in lst)]

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 2016-02-22
    • 2013-01-07
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    相关资源
    最近更新 更多