如果我在 python 中有一个列表,例如:
stuff = [1, 2, 3, 4, 5, 6, 7, 8, 9]
长度为 n(在本例中为 9),我有兴趣创建长度为 n/2(在本例中为 4)的列表。我想要原始列表中所有可能的 n/2 值集,例如:
[1, 2, 3, 4], [2, 3, 4, 5], ..., [9, 1, 2, 3]
是否有一些列表理解代码可以用来遍历列表并检索所有这些子列表?我不关心列表中值的顺序,我只是想找到一种生成列表的巧妙方法。
最佳答案
>>> stuff = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
>>> n=len(stuff)
>>>
>>> [(stuff+stuff[:n/2-1])[i:i+n/2] for i in range(n)]
[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8], [6, 7, 8, 9], [7, 8, 9, 1], [8, 9, 1, 2], [9, 1, 2, 3]]
>>>
注意:以上代码是基于您的示例的假设
[1, 2, 3, 4], [2, 3, 4, 5], ..., [9, 1, 2, 3]
如果您确实需要所有可能的值,则需要按照其他人的建议使用 itertools.permutations 或组合函数。
关于Python 列表理解返回列表的边缘值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643209/