1

我想从现有列表中创建一个列表。

原文有清单:

mylist = ["single extra", "double double", "tripple, double, singe", "mohan point tripple decker","one","covent gardens london tw45hj", "honda"]

找出 mylist 中每个标签中的单词数:

num_words = [len(sentence.split()) for sentence in mylist]

打印 num_words

[2, 2, 3, 4, 1, 4, 1]

让我们暂时假设 mylist 是一个长字符串,

"single extra double double tripple double singe mohan point tripple decker one covent gardens london tw45hj honda"

我想弄清楚每个标签在那个长长的列表中从哪里开始。

所以我知道在原始列表“mylist”中,第一个索引有 2 个单词,所以它会从 0 到 2 开始,然后下一个索引包含 2 个单词,所以会从 3 到 5 开始,依此类推......

手动数学会是这样的:

1 + 2 = 3
3 + 2 = 5
5 + 3 = 8
8 + 4 = 12
12 + 1 = 13
13 + 4 = 17
17 + 1 = 18 

我试过这个:

p=0
x=1
for i, item in enumerate(num_words):
    result = num_words[p] + num_words[x]
    results = result + num_words[x]
    x += 1
    p += 1

打印结果

但那失败了……

我希望这是有道理的.....

谢谢大家

4

2 回答 2

3

你想要做的就是运行总计。您可以使用简单的循环:

>>> res, c = [], 1
>>> for x in num_words:
...     c += x
...     res.append(c)
>>> res
[3, 5, 8, 12, 13, 17, 18]

也可以以功能样式完成它,如下所示:

>>> reduce(lambda x, y: x + [x[-1] + y], num_words, [1])[1:]
[3, 5, 8, 12, 13, 17, 18]
于 2013-09-16T14:40:40.027 回答
1

在 py3.x 上,您可以使用itertools.accumulate

>>> from itertools import accumulate
>>> list(accumulate([1] + lis))[1:]
[3, 5, 8, 12, 13, 17, 18]

对于 py2.x:

def cummutalive_sum(lis):
    total = 1
    for item in lis:
        total += item
        yield total
...         
>>> list(cummutalive_sum(lis))
[3, 5, 8, 12, 13, 17, 18]
于 2013-09-16T14:50:11.407 回答