如果我采用像“do re mi fa sol”这样的结构化句子并将其分解为单词。我怎么能以产生包含下面的列表的方式进行迭代?
示例:
['do', 're', 'mi', 'fa', 'sol'],
do re mi fa sol
do re re mi mi fa fa sol
do re mi re mi fa mi fa sol
do re mi fa re mi fa sol
do re mi fa sol
答案 0 :(得分:1)
要创建所需的所有子列表,请尝试:
from itertools import chain, accumulate
def sublists(l):
return chain.from_iterable(accumulate([s] for s in l[i:])
for i in range(len(l)))
output = list(sublists("do re mi fa sol".split()))
这给了我:
[['do'], ['do', 're'], ['do', 're', 'mi'],
['do', 're', 'mi', 'fa'], ['do', 're', 'mi', 'fa', 'sol'],
['re'], ['re', 'mi'], ['re', 'mi', 'fa'], ['re', 'mi', 'fa', 'sol'],
['mi'], ['mi', 'fa'], ['mi', 'fa', 'sol'],
['fa'], ['fa', 'sol'], ['sol']]
Documentation for the itertools
module。请注意,accumulate
是Python 3.2中的新增功能,但您可以在早期版本中使用Python实现。
答案 1 :(得分:0)
您应该使用split()
功能。来自Python docs:
str.split([sep [,maxsplit]]) - 使用sep作为分隔符字符串返回字符串中单词的列表...
<强>代码:强>
a = "do re mi fa sol"
a_list = a.split()
print a_list
<强>输出:强>
>>> ['do', 're', 'mi', 'fa', 'sol']
答案 2 :(得分:0)
你想要使用一套,所以你不要重复。
txt = """do re mi fa sol do re re mi mi fa fa sol do re mi re mi fa mi fa sol do re mi fa re mi fa sol do re mi fa sol"""
a = set(txt.split()) #splits on whitespace then casts to a set
#a == {'mi', 'sol', 'fa', 'do', 're'}
如果您需要保留订单,可以执行以下操作:
a = [value for i,value in
enumerate(txt.split()) if value not in txt.split()[i+1:]]
但这比使用set()
或许您正在尝试合并您的列表?尝试:
txt = """do re mi fa sol do re re mi mi fa fa sol do re mi re mi fa mi fa sol do re mi fa re mi fa sol do re mi fa sol"""
a = set(txt.split())
b = [' '.join(list(a[i:])) for i in range(len(a)]
#b == ['mi sol fa do re', 'sol fa do re', 'fa do re', 'do re', 're']