【问题标题】:Python range with start larger than stop开始大于停止的Python范围
【发布时间】:2016-10-30 17:53:34
【问题描述】:

我想将向量的i 索引统一提取t 次。例如,如果我有一个向量 x = [1,2,3,4,5,6,7]i = 3t = 5,那么我每次的索引必须是:

t = 1; [1,2,3]

t = 2; [4,5,6]

t = 3; [7,1,2]

t = 4; [3,4,5]

t = 5; [6,7,1]

是否可以在 Python 中使用range() 来实现?

【问题讨论】:

标签: python loops indexing


【解决方案1】:

试试这个:

x = [1,2,3,4,5,6,7]
xc = len(x)
i = 3

for t in range(5):
    y = [x[(i*t + j) % xc] for j in range(i)]
    print(y)

这会产生:

[1, 2, 3]
[4, 5, 6]
[7, 1, 2]
[3, 4, 5]
[6, 7, 1]

【讨论】:

    【解决方案2】:

    您可以在itertools.cycle 上使用itertools.islice。从可迭代对象中创建一个cycle 对象,并使用您的窗口大小i 创建slice 对象:

    from itertools import cycle
    from itertools import islice
    
    l = [1,2,3,4,5,6,7]
    t = 5; i = 3
    
    c =  cycle(l) 
    r = [list(islice(c, i)) for _ in range(t)] # range appears here
    # [[1, 2, 3], [4, 5, 6], [7, 1, 2], [3, 4, 5], [6, 7, 1]]
    

    您可以将此应用于i 的不同非负值,即使i 大于列表长度:

    i = 10
    r = [list(islice(c, i)) for _ in range(t)]
    print(r)
    # [[1, 2, 3, 4, 5, 6, 7, 1, 2, 3], [4, 5, 6, 7, 1, 2, 3, 4, 5, 6], [7, 1, 2, 3, 4, 5, 6, 7, 1, 2], [3, 4, 5, 6, 7, 1, 2, 3, 4, 5], [6, 7, 1, 2, 3, 4, 5, 6, 7, 1]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      相关资源
      最近更新 更多