#python #list #cyclic-reference
#python #Список #циклическая ссылка
Вопрос:
У меня есть задача создать программу, в которой я получаю m, n и k. Я должен создать список a с n*m
элементом. Предполагается, что в списке b
должен быть n*m
элемент. Он создается из списка a с циклическим сдвигом k вправо для m элементов списков. Я знаю, что это плохо объяснено. Пример:
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
На данный момент у меня есть:
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 = ' ')
Спасибо
Комментарии:
1. Извините, в чем ваш вопрос?
2. @MooingRawr OP в основном пытается выполнить 2d циклический сдвиг 1D массива.
3. @karthikr это то, что я предполагал, но я не хочу работать над чем-то, основываясь только на предположении, если смогу получить разъяснения. Спасибо за разъяснение.
Ответ №1:
Попробуйте это…
# 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)
Ответ №2:
Альтернатива:
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)
Если вы хотите большей скорости, вы можете использовать deque из модуля collections для сборки t_2.
Вот результат.
[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]
Комментарии:
1. Я понимаю суть, но я могу сделать это только с помощью for , if или while, поскольку я только начал изучать python.