Python 列表中的字符串拆分
我应该创建一个名为Python 列表中的字符串拆分,python,Python,我应该创建一个名为lastfirst()的函数,该函数接受以下输入: ['Gerber,Len','Fox,Kate','Dunn,Bob'] 然后,函数应返回一个列表,其中包含两个名和姓的列表,如下所示: 我不知道为什么这会给我带来这么多问题,我尝试了这么多不同的方法来解决,但我就是搞不懂。感谢您的帮助。:) 结果:- [['Len', 'Kate', 'Bob'],['Gerber', 'Fox', 'Dunn']] 首先拆分和剥离项目以获得名称/名字对,然后使用listcomps重新组
lastfirst()
的函数,该函数接受以下输入:
['Gerber,Len','Fox,Kate','Dunn,Bob']
然后,函数应返回一个列表,其中包含两个名和姓的列表,如下所示:
我不知道为什么这会给我带来这么多问题,我尝试了这么多不同的方法来解决,但我就是搞不懂。感谢您的帮助。:)
结果:-
[['Len', 'Kate', 'Bob'],['Gerber', 'Fox', 'Dunn']]
首先拆分和剥离项目以获得名称/名字对,然后使用listcomps重新组合以获得适当的排列
l = ['Gerber, Len', 'Fox, Kate', 'Dunn, Bob']
c = [[y.strip() for y in x.split(",")] for x in l]
result = [[n[1] for n in c],[n[0] for n in c]]
结果:
[['Len', 'Kate', 'Bob'], ['Gerber', 'Fox', 'Dunn']]
编辑:如果保证分隔为,“
,我们甚至不需要strip
部分,因为split
接受多字符字符串参数。在这种情况下,它更简单:
l = ['Gerber, Len', 'Fox, Kate', 'Dunn, Bob']
c = [x.split(", ") for x in l]
result = [[n[1] for n in c],[n[0] for n in c]]
这也适用于:
people = ["Gerber, Len", "Fox, Kate", "Dunn, Bob", "Walsh, Jack"]
def lastfirst(the_list):
name = []
lastname = []
for i in the_list:
lastname.append(i.split(",")[0])
name.append(i.split(", ")[1])
firstlast = [name, lastname]
print (firstlast)
lastfirst(people)
做了一些修改,这条路线更长,但可能对初学者更友好,至少我会觉得这样。我意识到输出取决于所观察到的正确形式的输入。保持简单并利用列表理解
def lastfirst(l):
return [[x.split(',')[1].strip() for x in l], [x.split(',')[0].strip() for x in l]]
print lastfirst(['Gerber, Len', 'Fox, Kate', 'Dunn, Bob'])
它会打印出来
[['Len', 'Kate', 'Bob'], ['Gerber', 'Fox', 'Dunn']]
作为答复
>>> l = ['Gerber, Len', 'Fox, Kate', 'Dunn, Bob']
>>> print [[x.split(',')[1].strip() for x in l], [x.split(',')[0].strip() for x in l]]
[['Len', 'Kate', 'Bob'], ['Gerber', 'Fox', 'Dunn']]
利用zip
>>> a = ['Gerber, Len', 'Fox, Kate', 'Dunn, Bob']
>>> b = [i.split(', ') for i in a]
list(zip(*b))
[('Gerber', 'Fox', 'Dunn'), ('Len', 'Kate', 'Bob')]
这将返回一个元组列表,但如果您确实需要一个列表,则可以使用map
>>> list(map(list, (zip(*b))))
[['Gerber', 'Fox', 'Dunn'], ['Len', ' Kate', 'Bob']]
如果您想撤销列表,只需使用内置的reversed
函数将Jean Francois的建议再推进一步(顺便说一句,他没有给出这个答案是正确的)
在第一步中翻转姓名
c=[[y.strip()表示x.split中的y(“,”)[:-1]表示l中的x]
结果是
In [14]: c
Out[14]: [['Len', 'Gerber'], ['Kate', 'Fox'], ['Bob', 'Dunn']]
重新排列列表-星号“解包”c为3个连续的[姓名,姓氏]列表,zip将3个长度为2的列表重新排列为2个长度为3的列表
result=zip(*c)
这是一种更高级的方法,你可能会发现它在将来很有用。在你的尝试后,显示一个问题而不尝试获得三张赞成票吗?@padraiccningham有时会发生奇怪的事情:)呃,拳头
或第一
?而且输出是[['Gerber,Len','Dunn,Bob'],['Fox,Kate']]
,而不是OP所期望的。。。我怀疑这在你的计算机上从未运行过。@RoryDaulton:现在尝试一下,但输入不是OP发布的输入。打印最后一行给我['Len','Kate','Bob']['Gerber','Fox','Dunn']
,与要求的不完全一样--检查前导空格。我添加了另一个名字和姓氏,效果很好。还是你只想要我得到的结果?哦,我现在明白了,一个包含两个列表的列表。当我将print语句改为print([name,lastname])@Jean Françoisfare时,这对我来说非常有效。你是什么意思?你在我发表评论后编辑了你的帖子。现在它是正确的。你不处理前导空格。但是很好。使用i.split(',')
oh!可以使用split(',')
而不是split(',')
…fixedpvote来修复此问题。。。固定的。哦,你也得把你的清单倒过来。
In [14]: c
Out[14]: [['Len', 'Gerber'], ['Kate', 'Fox'], ['Bob', 'Dunn']]