3

假设我有一个清单,['a', 'b', 'c', 'd']. Python 中是否有任何内置函数或方法可以轻松创建从第一项开始的所有连续子列表(即子序列)?:

['a']
['a', 'b']
['a', 'b', 'c']
['a', 'b', 'c', 'd']

在 Python 中?

请注意,我不包括列表/序列,例如['a' ,'c'], ['a', 'd'], ['b'],['c']['d']

4

4 回答 4

5

要匹配您的示例输出(前缀),您可以使用:

prefixes = [your_list[:end] for end in xrange(1, len(your_list) + 1)]
于 2013-10-16T15:34:23.153 回答
4

您可以通过简单的列表理解来做到这一点:

>>> l = ['a', 'b', 'c', 'd']
>>> 
>>> [l[:i+1] for i in range(len(l))]
[['a'], ['a', 'b'], ['a', 'b', 'c'], ['a', 'b', 'c', 'd']]

也可以看看:range()

如果您使用的是 Python 2.x,请xrange()改用。

于 2013-10-16T15:33:40.553 回答
1

比 using 更 Pythonic 一点(x)range(好处是对于 Python 2 或 Python 3 都是相同的解决方案):

lst = list('abcde')
prefixes = [ lst[:i+1] for i,_ in enumerate(lst) ]

如果你决定空列表应该是一个有效的(零长度)前缀,一个小技巧将包括它:

# Include 0 as an slice index and still get the full list as a prefix
prefixes = [ lst[:i] for i,_ in enumerate(lst + [None]) ]
于 2013-10-16T15:52:02.830 回答
1

作为替代方案:

def prefixes(seq):
    result = []
    for item in seq:
        result.append(item)
        yield result[:]

for x in prefixes(['a', 'b', 'c', 'd']):
    print(x)
于 2013-10-16T16:48:16.640 回答