我有一个字符串,我在所有不同的位置插入一个空格并将它们保存到列表中。现在这个包含空格的字符串列表,我想拆分这些字符串并将输出放在一个列表中,当我这样做时,它会发生内部有多个列表:
这是我正在处理的代码:
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的新手,我不知道丢失了什么。
由于
答案 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']