拆分字符串并使用Python将它们保存到列表中

时间:2017-12-30 00:32:32

标签: python string python-3.x list split

我有一个字符串,我在所有不同的位置插入一个空格并将它们保存到列表中。现在这个包含空格的字符串列表,我想拆分这些字符串并将输出放在一个列表中,当我这样做时,它会发生内部有多个列表:

这是我正在处理的代码:

var ='sans'
res = [var[:i]+' '+var[i:] for i in range(len(var))]
// The previous line: AM adding a space to see maybe that would generate other words
cor = [res[i].split() for i in range (len(res))]

这是我得到的输出:

>>> cor
[['sans'], ['s', 'ans'], ['sa', 'ns'], ['san', 's']]

期待的是:

>>> cor
    ['sans', 's', 'ans', 'sa', 'ns', 'san', 's']

我是python的新手,我不知道丢失了什么。

由于

5 个答案:

答案 0 :(得分:4)

另一种方法:

cor = " ".join(res).split()

输出:

['sans', 's', 'ans', 'sa', 'ns', 'san', 's']

<强>解释

" ".join(res)将加入res中的各个字符串,并在它们之间留一个空格。然后调用.split()会将空格上的这个字符串拆分回列表。

编辑:第二种不涉及中间变量res的方法,虽然这种方法在眼睛上并不那么容易:

cor = [var[:i/2+1] if i%2==1 else var[i/2:] for i in range(2*len(var)-1)]

基本上你可以在正面和背面建立子串之间进行切换。

答案 1 :(得分:3)

首先,你的

[res[i].split() for i in range (len(res))]

是一种复杂的unpythonic方式,可以这样做:

[r.split() for r in res]

现在......问题在于您将r.split()视为最终结果。您应该将其用作进一步处理它的来源:

[s for r in res for s in r.split()]

答案 2 :(得分:1)

如果你有一个清单

cor = [['sans'], ['s', 'ans'], ['sa', 'ns'], ['san', 's']]

你想要展平它,你可以使用以下内容:

flat = [x for y in cor for x in y]

输出将是:

['sans', 's', 'ans', 'sa', 'ns', 'san', 's']

您也可以直接使用res变量:

cor = [x for y in [res[i].split() for i in range (len(res))] for x in y]

答案 3 :(得分:1)

您始终可以使用map()拆分T<n,k>中的每个字符串:

res

给出了:

list(map(str.split, res))

然后您可以使用itertools.chain.from_iterable展平列表:

[['sans'], ['s', 'ans'], ['sa', 'ns'], ['san', 's']]

哪个输出:

list(chain.from_iterable(map(str.split, res)))

答案 4 :(得分:0)

您可以在一行中执行类似的操作,而无需导入任何模块:

var ='sans'

final=[]
list(map(lambda x:list(map(lambda y:final.append(y),x)),[(var[i:]+' '+var[:i]).split() for i in range(0,len(var))]))
print(final)

输出:

['sans', 'ans', 's', 'ns', 'sa', 's', 'san']