2015-09-27 2 views
0

Предположим, у меня есть куча элементов в длинном списке, и я хочу переключать их на основе вывода, который я получаю в функции random.randit (lo, hi). Например, мой списокПереключение двух элементов в Python

L=[(1,hi), (1, bye), (1,nope), (1,yup), (2,hi), (2, bye), (2,nope), (2,yup), (3,hi), (3, bye), (3,nope), (3,yup), (4,hi), (4, bye), (4,nope), (4,yup), (5,hi), (5, bye), (6,nope), (7,yup)] 

если я импортировать from random import randint, а затем сделать randint(0,(len(L)-1)) число я получаю в качестве вывода я хочу взять деталь, индексированную на этот номер и поменять его с последним элементом в списке, а затем randint(lo, len(L)-2)) и возьмите номер, который я получаю с этого вывода, возьмите элемент, проиндексированный с этим номером, и замените его вторым и последним элементом и так далее, пока я не дойду до начала. Это похоже на то, что я хочу переупорядочить список полностью случайным и не использовать функцию тасования.

** Я понимаю, что могу сделать randint (0, (len (L) -1)), и если я получу 5 в качестве вывода, то A = L [19] (потому что я знаю последний элемент в моем списке индексируется как 19). И затем сделайте L [19] = L [5], так что 5-й элемент займет 19-е элементы, а затем сделает L [5] = A, так что последний элемент WAS станет 5-м элементом. Но я не знаю, как написать это как цикл.

+0

перетасовать является случайным – hjpotter92

+0

то, что вы сделали – Hooting

+0

возможный дубликат [Как переключить положение двух элементов в списке Python?] (Http://stackoverflow.com/questions/2493920/how-to-switch -position-of-two-items-in-a-python-list) –

ответ

0
for i in xrange(len(L) - 1, 1, -1): 
    x = randint(lo, i) # lo would be 0 for shuffling entire list 
    L[i], L[x] = L[x], L[i] 
1
L =[(1,'hi'), (1, 'bye'), (1,'nope'), (1,'yup'), (2,'hi'), (2, 'bye'), (2,'nope'), (2,'yup'), (3,'hi'), (3, 'bye'), 
    (3,'nope'), (3,'yup'), (4,'hi'), (4, 'bye'), (4,'nope'), (4,'yup'), (5,'hi'), (5, 'bye'), (6,'nope'), (7,'yup')] 


    for i in range(-1, -len(L) -1 ,-1): 
    n = randint(0,(len(L) -1)) 
    L[n], L[i] = L[i], L[n] 


print(L) 

выход

[(2, 'nope'), (6, 'nope'), (3, 'hi'), (3, 'yup'), (2, 'bye'), (7, 'yup'), (1, 'hi'), (3, 'bye'), (3, 'nope'), (1, 'yup'), (1, 'bye'), (5, 'bye'), (4, 'yup'), (5, 'hi'), (4, 'bye'), (2, 'hi'), (2, 'yup'), (4, 'hi'), (1, 'nope'), (4, 'nope')] 
0

Вы можете использовать pop и append завернутые в структуре списка понимания перетасовать список. Затем вы случайно выбираете элемент из сокращающегося списка и добавляете его в конец.

from random import randint 

L = [(1, 'hi'), (1, 'bye'), (1, 'nope'), (1, 'yup'), 
    (2, 'hi'), (2, 'bye'), (2, 'nope'), (2, 'yup'), 
    (3, 'hi'), (3, 'bye'), (3, 'nope'), (3, 'yup'), 
    (4, 'hi'), (4, 'bye'), (4, 'nope'), (4, 'yup'), 
    (5, 'hi'), (5, 'bye'), (6, 'nope'), (7, 'yup')] 

_ = [L.append(L.pop(randint(0, n))) for n in range(1, len(l) - 1)] 
Смежные вопросы