itertools.combinations提供的保证是什么?

时间:2018-11-02 04:56:50

标签: python

itertools.combinations的文档状态:

  

组合按字典顺序排序。因此,如果对输入 iterable 进行排序,则将按排序顺序生成组合元组。

     

元素是根据元素的位置而不是它们的值来对待的。因此,如果输入元素是唯一的,则每个组合中都不会有重复的值。

[重点突出]

这里到底能提供什么保证?经验检查表明元素总是像被

发出一样
for i in range(len(iterable)):
    for j in range(i + 1, len(iterable)):
        for k in range(j + 1, len(iterable)):
            ...
                yield iterable[i], iterable[j], iterable[k], ...

在这种情况下,“词典序”是什么意思?特别是,我认为强调的句子很关键,但我并不是这种联系的100%。我认为意味着将字典顺序应用于元素的索引,而不管其值如何,但我希望有人确认这一点。

1 个答案:

答案 0 :(得分:10)

要将这些段落从计算机科学翻译成英文:

  

组合按字典顺序排序。因此,如果对可迭代输入进行排序,则将按排序顺序生成组合元组。

“词典”在这里是一个数学术语,并非按字母顺序表示,而是“按词典定义的任何顺序”。

  

17世纪初期:现代拉丁语,来自希腊语 lexikon(biblion)'单词(书)',来自 lexis 'word',来自 legein < / em>“说话”。

这里的“词典”是您的输入。简而言之,您的输入定义了生成输出的顺序。如果要按字母顺序对输出进行排序,请对输入进行排序。

  

根据元素的位置而不是其值将元素视为唯一。因此,如果输入元素是唯一的,则每个组合中将没有重复值。

这只是说combinations不会查看或关心实际值本身,它只是根据元素的位置组合元素。它不会基于值进行重复数据删除,而是对位置组合进行重复数据删除。如果您想要唯一的组合,请对输入内容进行重复数据删除。