假设我有一个清单,['a', 'b', 'c', 'd']
. Python 中是否有任何内置函数或方法可以轻松创建从第一项开始的所有连续子列表(即子序列)?:
['a']
['a', 'b']
['a', 'b', 'c']
['a', 'b', 'c', 'd']
在 Python 中?
请注意,我不包括列表/序列,例如['a' ,'c']
, ['a', 'd']
, ['b']
,['c']
或['d']
假设我有一个清单,['a', 'b', 'c', 'd']
. Python 中是否有任何内置函数或方法可以轻松创建从第一项开始的所有连续子列表(即子序列)?:
['a']
['a', 'b']
['a', 'b', 'c']
['a', 'b', 'c', 'd']
在 Python 中?
请注意,我不包括列表/序列,例如['a' ,'c']
, ['a', 'd']
, ['b']
,['c']
或['d']
要匹配您的示例输出(前缀),您可以使用:
prefixes = [your_list[:end] for end in xrange(1, len(your_list) + 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]) ]
作为替代方案:
def prefixes(seq):
result = []
for item in seq:
result.append(item)
yield result[:]
for x in prefixes(['a', 'b', 'c', 'd']):
print(x)