Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表中的字符串拆分_Python - Fatal编程技术网

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']]