循环显示python列表中的项目分组列表

Sat*_*yaV 8 python arrays list

我有一个数组,给定一组中的项目数和组数,我需要在循环中循环打印该数组。数组-[1,2,3,4,5,6] 组- 4 次迭代- 7

输出应该是:

['1', '2', '3', '4']
['5', '6', '1', '2']
['3', '4', '5', '6']
['1', '2', '3', '4']
['5', '6', '1', '2']
['3', '4', '5', '6']
['1', '2', '3', '4']
Run Code Online (Sandbox Code Playgroud)

Pau*_*zer 11

np.resize 这里很方便:

np.resize([1,2,3,4,5,6],(7,4))
# array([[1, 2, 3, 4],
#        [5, 6, 1, 2],
#        [3, 4, 5, 6],
#        [1, 2, 3, 4],
#        [5, 6, 1, 2],
#        [3, 4, 5, 6],
#        [1, 2, 3, 4]])
Run Code Online (Sandbox Code Playgroud)


Azi*_*ziz 7

这是一种方法。我创建了一个由输入数组组成的更长的列表两次,所以是这样的:

[1,2,3,4,5,6,1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

然后将其从起始索引切片ii+N(N是组的大小,在本例中为 4)。

a = [1,2,3,4,5,6]

N = 4 # Number of elements in a group

aa = a+a # create a list composed of the array 'a' twice

i = 0 # starting index

for loop in range(7):
    # extract the elements from the doublelist
    print(aa[i:i+N])

    # The next starting point has to be within the range of array 'a'
    i = (i+N)%len(a)
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3, 4]
[5, 6, 1, 2]
[3, 4, 5, 6]
[1, 2, 3, 4]
[5, 6, 1, 2]
[3, 4, 5, 6]
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)


Gor*_*son 5

您可以尝试以下使用itertools.cycle

import itertools

t = [1, 2, 3, 4, 5, 6]

number_of_elms_in_a_group = 4
iteration_number = 7

groups = []
group = []
for i, x in enumerate(itertools.cycle(t)):
    if len(groups) >= iteration_number:
        break
    if i % number_of_elms_in_a_group == 0 and i != 0:
        groups.append(group)
        group = []
    group.append(x)

# At this point,
# groups == [[1, 2, 3, 4], [5, 6, 1, 2], [3, 4, 5, 6],
#            [1, 2, 3, 4], [5, 6, 1, 2], [3, 4, 5, 6],
#            [1, 2, 3, 4]]
for group in groups:
    print(group)
Run Code Online (Sandbox Code Playgroud)

哪个打印

[1, 2, 3, 4]
[5, 6, 1, 2]
[3, 4, 5, 6]
[1, 2, 3, 4]
[5, 6, 1, 2]
[3, 4, 5, 6]
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)


GZ0*_*GZ0 5

一种解决方案是itertools.cycleitertools.slice.

from itertools import cycle, islice

def format_print(iterable, group_size, iterations):
    iterable = cycle(iterable)
    for _ in range(iterations):
        print(list(islice(iterable, 0, group_size)))

format_print(range(1, 7), 4, 7)
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3, 4]
[5, 6, 1, 2]
[3, 4, 5, 6]
[1, 2, 3, 4]
[5, 6, 1, 2]
[3, 4, 5, 6]
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

如果需要打印字符串列表,cycle(iterable)可以替换为cycle(map(str, iterable)).