【问题标题】:Python Array List getting values with double different modPython Array List 获取具有双重不同模式的值
【发布时间】:2022-01-01 14:48:23
【问题描述】:

我需要帮助在 python 中使用不同技术从列表中提取数据

例如: 我们有一个包含 20 个不同值的列表。

lst = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','r','s','t','w']

mod = 5
roundMod= 3

期望的输出

Round 1 :
1 - a,
2 - b,
3 - c,
4 - d,
5 - e,

Round 2 :
1 - a,
2 - b,
3 - c,
4 - d,
5 - e,

Round 3 :
1 - a,
2 - b,
3 - c,
4 - d,
5 - e,

Round 1:
6 - f,
7 - g,
8 - h,
9 - i,
10 - j,

Round 2 :
6 - f,
7 - g,
8 - h,
9 - i,
10 - j,

Round 3 :
6 - f,
7 - g,
8 - h,
9 - i,
10 - j,

我有一个 mod 用于在获取下一个 5 个元素之前为每轮获取最大 5 个值和 roundmod 用于最大轮数

【问题讨论】:

    标签: python arrays list mod


    【解决方案1】:

    IIUC,您想用逐步的起点/终点对列表进行切片。为此使用整数除法 (//):

    List = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','r','s','t','w']
    
    mod = 5
    roundMod= 3
    
    for i in range(6): # not sure how the number of "lines" is defined
        d = i//roundMod
        print(f'{i=}, {d=},', List[d*mod:(d+1)*mod])
    

    输出:

    i=0, d=0, ['a', 'b', 'c', 'd', 'e']
    i=1, d=0, ['a', 'b', 'c', 'd', 'e']
    i=2, d=0, ['a', 'b', 'c', 'd', 'e']
    i=3, d=1, ['f', 'g', 'h', 'i', 'j']
    i=4, d=1, ['f', 'g', 'h', 'i', 'j']
    i=5, d=1, ['f', 'g', 'h', 'i', 'j']
    

    如果您还想跟踪回合,请使用divmod

    List = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','r','s','t','w']
    
    mod = 5
    roundMod= 3
    
    for i in range(6):
        d,r = divmod(i, roundMod)
        print(f'Round {r+1}: ', List[d*mod:(d+1)*mod])
    

    输出:

    Round 1:  ['a', 'b', 'c', 'd', 'e']
    Round 2:  ['a', 'b', 'c', 'd', 'e']
    Round 3:  ['a', 'b', 'c', 'd', 'e']
    Round 1:  ['f', 'g', 'h', 'i', 'j']
    Round 2:  ['f', 'g', 'h', 'i', 'j']
    Round 3:  ['f', 'g', 'h', 'i', 'j']
    

    【讨论】:

      【解决方案2】:

      这似乎是生成器的工作:

      def pull(lst, mod = 5, round_mod = 3):
          counter = 0
          while True:
              start = counter // round_mod
              if start * mod >= len(lst):
                  break
              yield lst[start * mod:(start + 1)*mod]
              counter += 1
              
      puller = pull(l)
      
      print([x for x in puller])
      

      输出

      [['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e'], ['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h', 'i', 'j'], ['f', 'g', 'h', 'i', 'j'], ['f', 'g', 'h', 'i', 'j'], ['k', 'l', 'm', 'n', 'o'], ['k', 'l', 'm', 'n', 'o'], ['k', 'l', 'm', 'n', 'o'], ['p', 'r', 's', 't', 'w'], ['p', 'r', 's', 't', 'w'], ['p', 'r', 's', 't', 'w']]
      

      或者,准确再现您想要的输出:

      for n, x in enumerate(puller):
          print(f'Round {n + 1}: {", ".join([f"{i + 1} - {v}" for i, v in enumerate(x)])}')
      

      输出

      Round 1: 1 - a, 2 - b, 3 - c, 4 - d, 5 - e
      Round 2: 1 - a, 2 - b, 3 - c, 4 - d, 5 - e
      Round 3: 1 - a, 2 - b, 3 - c, 4 - d, 5 - e
      Round 4: 1 - f, 2 - g, 3 - h, 4 - i, 5 - j
      Round 5: 1 - f, 2 - g, 3 - h, 4 - i, 5 - j
      Round 6: 1 - f, 2 - g, 3 - h, 4 - i, 5 - j
      Round 7: 1 - k, 2 - l, 3 - m, 4 - n, 5 - o
      Round 8: 1 - k, 2 - l, 3 - m, 4 - n, 5 - o
      Round 9: 1 - k, 2 - l, 3 - m, 4 - n, 5 - o
      Round 10: 1 - p, 2 - r, 3 - s, 4 - t, 5 - w
      Round 11: 1 - p, 2 - r, 3 - s, 4 - t, 5 - w
      Round 12: 1 - p, 2 - r, 3 - s, 4 - t, 5 - w
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-01
        • 2017-07-03
        • 1970-01-01
        • 2020-12-24
        • 1970-01-01
        • 2012-05-02
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多