在python中使用组合对象

2024-10-02 02:36:49 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> import itertools
>>> n = [1,2,3,4]
>>> combObj = itertools.combinations(n,3)
>>>
>>> combObj
<itertools.combinations object at 0x00000000028C91D8>
>>>
>>> list(combObj)
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
>>>
>>> for i in list(combObj): #This prints nothing
...     print(i)
...
  1. 如何迭代combObj?

  2. 如何转换
    [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

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


Tags: inimportforobjectthisprintsatlist
3条回答

要转换为列表列表,可以执行以下操作:

[list(item) for item in combObj]

生成器很好,因为它们不占用太多内存。如果你经常使用它并且有内存,那么把它保存为元组而不是生成器。在

否则,每当我想使用生成器时,我通常会创建一个函数来返回它:

>>> def get_combObj():
...     return itertools.combinations(n,3)
...
>>> for i in get_combObj():
...     print list(i)
...
[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]

(您可以任意调用get_combObj())

一旦您迭代了一次itertools.combinations对象,它就已经用完了,您不能再次迭代它。在

如果您需要重用它,正确的方法是像您所做的那样使它成为list或{}。你需要做的就是给它一个名字(把它赋给一个变量),这样它就可以继续存在了。在

combList = list(combObject) # Don't iterate over it before you do this!

如果您只想在它上迭代一次,那么根本就不调用list

^{pr2}$

旁注:命名对象实例/普通变量的标准方法是comb_obj,而不是combObj。有关详细信息,请参见PEP-8。在

要将内部的tuple转换为list,请使用列表理解和list()内置函数:

comb_list = [(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
comb_list = [list(item) for item in comb_list]

相关问题 更多 >

    热门问题