相关疑难解决方法(0)

优雅的方式来跳过迭代中的元素

我有一个很大的可迭代,实际上是一个大的迭代,由下式给出:

itertools.permutations(range(10))
Run Code Online (Sandbox Code Playgroud)

我想访问第一百万个元素.我已经以某种不同的方式解决了问题.

  1. 将iterable转换为list并获取1000000th元素:

    return list(permutations(range(10)))[999999]
    
    Run Code Online (Sandbox Code Playgroud)
  2. 手动滑动元素直到999999:

    p = permutations(range(10))
    for i in xrange(999999): p.next()
    return p.next()
    
    Run Code Online (Sandbox Code Playgroud)
  3. 手动滑动元素v2:

    p = permutations(range(10))
    for i, element in enumerate(p):
        if i == 999999:
            return element
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用itertools中的islice:

    return islice(permutations(range(10)), 999999, 1000000).next()
    
    Run Code Online (Sandbox Code Playgroud)

但我仍然觉得这些都不是python的优雅方式.第一个选项太昂贵,它需要计算整个迭代只是为了访问单个元素.如果我没有错,那么islice在内部执行的方法与我在方法2中所做的相同,并且几乎完全是第3次,也许它有更多的冗余操作.

所以,我只是好奇,想知道是否有python以其他方式访问迭代的具体元素,或者至少以更优雅的方式跳过第一个元素,或者如果我只需要使用一个以上.

python iterator iterable

5
推荐指数
1
解决办法
5331
查看次数

如何找到给定字符串排列的排列?

例如,

rank  permutation   
0     abc
1     acb
2     bac
3     bca
4     cab
5     cba
Run Code Online (Sandbox Code Playgroud)

所以,如果有人要求我给排名4排列,答案就是出租车.请给出这个程序的java代码

algorithm permutation combinatorics

3
推荐指数
1
解决办法
2300
查看次数