2 votes

Code qui fait une référence cyclique pour x espaces dans la liste

J'ai une tâche pour faire un programme dans lequel j'obtiens m, n et k. Je dois créer une liste a avec n*m élément. Liste b est censé avoir n*m élément. Il est créé à partir de la liste a avec un décalage cyclique k vers la droite pour m éléments de listes. Je sais que c'est mal expliqué. Voici un exemple :

n=3
m=4
A=1 2 3 4 5 6 7 8 9 10 11 12
k=1
B=4 1 2 3 8 5 6 7 12 9 10 11

Ce que j'ai en ce moment est :

from random import randint
n = int(input())
m=int(input())

A = []
B=[0]
B=B*n*m
for i in range(n*m):
    A = A + [randint(1, 30)]

print('\nLista A:\n')
for i in range(n*m):
    print(A[i], end = ' ')

print()

k=int(input())

for i in range(-1, m*n, m):
    B[m-1-i]=A[i]
    print(B[m-1-i])

print('\nLista B:\n')
for i in range(n*m):
    print(B[i], end = ' ')

Merci

1voto

Jared N Points 154

Essayez ceci...

# Start with an empty list
B = []
# Take A in chunks of m
for i in range( int(len(A)/m) ):
    # Take an m-sized chunk of A
    chunk = A[m*i:m*(i+1)]
    # Shift it to the right by k (python style!)
    shift = chunk[-k:] + chunk[:-k]
    # Add it to B
    B += shift
print (B)

0voto

Bill Bell Points 1357

Alternatif :

m=4
n=3
k=1

A=list(range(1,1+m*n))
print (A)

t_1=[A[_:_+4] for _ in range(0,len(A), 4)]
print (t_1)

t_2=[]
for sublist in t_1:
    t_2.append(sublist[-k:]+sublist[:-k])
print (t_2)

B=[]
for sublist in t_2:
    B.extend(sublist)

print (B)

Si vous souhaitez une plus grande rapidité, vous pouvez utiliser une deque de la collections pour construire t_2 .

Voici le résultat.

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
[[4, 1, 2, 3], [8, 5, 6, 7], [12, 9, 10, 11]]
[4, 1, 2, 3, 8, 5, 6, 7, 12, 9, 10, 11]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X