相关疑难解决方法(0)

具有独特价值的排列

itertools.permutations根据其位置而不是其值来生成其元素被视为唯一的位置.所以基本上我想避免重复这样的:

>>> list(itertools.permutations([1, 1, 1]))
[(1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1)]
Run Code Online (Sandbox Code Playgroud)

之后进行过滤是不可能的,因为在我的情况下排列量太大了.

有人知道合适的算法吗?

非常感谢你!

编辑:

我基本上想要的是以下内容:

x = itertools.product((0, 1, 'x'), repeat=X)
x = sorted(x, key=functools.partial(count_elements, elem='x'))
Run Code Online (Sandbox Code Playgroud)

这是不可能的,因为sorted创建一个列表并且itertools.product的输出太大.

对不起,我应该已经描述了实际问题.

python permutation python-itertools

68
推荐指数
7
解决办法
3万
查看次数

如何向Iterator添加新方法?

我想.unique()在迭代器上定义一个方法,使我能够迭代而不重复.

use std::collections::HashSet;

struct UniqueState<'a> {
    seen: HashSet<String>,
    underlying: &'a mut Iterator<Item = String>,
}

trait Unique {
    fn unique(&mut self) -> UniqueState;
}

impl Unique for Iterator<Item = String> {
    fn unique(&mut self) -> UniqueState {
        UniqueState {
            seen: HashSet::new(),
            underlying: self,
        }
    }
}

impl<'a> Iterator for UniqueState<'a> {
    type Item = String;
    fn next(&mut self) -> Option<String> {
        while let Some(x) = self.underlying.next() {
            if !self.seen.contains(&x) {
                self.seen.insert(x.clone());
                return Some(x);
            }
        }
        None
    }
} …
Run Code Online (Sandbox Code Playgroud)

iterator rust

20
推荐指数
1
解决办法
2267
查看次数

标签 统计

iterator ×1

permutation ×1

python ×1

python-itertools ×1

rust ×1