Форум сайта python.su
5
Есть массив из массивов, вложенные массивы одинаковой длины.
Отбираем из них с помощью random какое-то количество элементов и пытаемся получить последний элемент и все, кроме последнего. Очевидное решение - метод pop:
import random my_data = [[a,b,c] for a in range (10) for b in range (10) for c in ('q','w','e','r','t','y','u','i','o')] for i in range(20): ts = random.sample(my_data, 20) for a in ts: ans = a.pop() print (a, 'last:', ans)
[7, 3] last: u
[4, 9] last: i
[3] last: 1
[2] last: 3
[2, 0] last: r
[7, 1] last: q
[9, 4] last: t
[2] last: 2
[0, 4] last: i
[4, 2] last: o
[3] last: 5
[5, 7] last: e
import random my_data = [[a,b,c] for a in range (10) for b in range (10) for c in ('q','w','e','r','t','y','u','i','o')] for i in range(20): ts = random.sample(my_data, 20) for a in ts: ans = a[-1] print (a[:-1], 'last:', ans)
Отредактировано Elaphe (Дек. 1, 2015 12:35:55)
Офлайн
5
Уже объяснили. Не стоит забывать про разделяемые ссылки и изменяемые объекты 
Отредактировано Elaphe (Дек. 1, 2015 12:56:22)
Офлайн
857
ElapheДело не в изменяемых объектах, а в том, что pop() удаляет элемент из списка и возвращает этот удалённый элемент. А sample() при повторных вызовах может выбирать из основного массива элементы, которые ранее уже выбирались.
Не стоит забывать про разделяемые ссылки и изменяемые объекты
>>> lst = [1, 2, 3] >>> lst [1, 2, 3] >>> lst.pop() 3 >>> lst [1, 2] >>>
Отредактировано py.user.next (Дек. 1, 2015 13:16:15)
Офлайн
5
Именно это и имелось в виду. Метод pop не создает копию, а изменяет сам массив, что невозможно было бы сделать с неизменяемым объектом.
Офлайн
857
ElapheУ неизменяемых объектов нет метода pop().
что невозможно было бы сделать с неизменяемым объектом
Офлайн
5
Я в курсе.
Офлайн