Hướng dẫn how to shuffle index in python - cách xáo trộn chỉ mục trong python

Có cách nào tốt hơn để xáo trộn ngẫu nhiên hai danh sách liên quan mà không phá vỡ thư từ của họ trong danh sách khác không? Tôi đã tìm thấy các câu hỏi liên quan trong ____10 và

[[1, 2], [7, 8], [3, 4], [5, 6], [9, 10]]
[2, 8, 4, 6, 10]
1 nhưng không chính xác là cùng một câu hỏi.

Khi thử đầu tiên, một thủ thuật

[[1, 2], [7, 8], [3, 4], [5, 6], [9, 10]]
[2, 8, 4, 6, 10]
2 đơn giản sẽ làm:

import random
a = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
b = [2, 4, 6, 8, 10]
c = zip(a, b)
random.shuffle(c)
a = [e[0] for e in c]
b = [e[1] for e in c]
print a
print b

Nó sẽ nhận được đầu ra:

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

Chỉ cần tìm thấy nó một chút khó xử. Và nó cũng cần một danh sách bổ sung là tốt.

Hỏi ngày 1 tháng 8 năm 2012 lúc 18:10Aug 1, 2012 at 18:10

Hướng dẫn how to shuffle index in python - cách xáo trộn chỉ mục trong python

Clwenclwenclwen

19.1K31 Huy hiệu vàng73 Huy hiệu bạc93 Huy hiệu Đồng31 gold badges73 silver badges93 bronze badges

3

Với mối quan hệ được thể hiện trong câu hỏi, tôi sẽ giả sử các danh sách có cùng độ dài và

[[1, 2], [7, 8], [3, 4], [5, 6], [9, 10]]
[2, 8, 4, 6, 10]
3 tương ứng với
[[1, 2], [7, 8], [3, 4], [5, 6], [9, 10]]
[2, 8, 4, 6, 10]
4 cho bất kỳ chỉ mục nào
[[1, 2], [7, 8], [3, 4], [5, 6], [9, 10]]
[2, 8, 4, 6, 10]
5. Với giả định đó, việc xáo trộn các danh sách cũng đơn giản như xáo trộn các chỉ số:

 from random import shuffle
 # Given list1 and list2

 list1_shuf = []
 list2_shuf = []
 index_shuf = list(range(len(list1)))
 shuffle(index_shuf)
 for i in index_shuf:
     list1_shuf.append(list1[i])
     list2_shuf.append(list2[i])

Đã trả lời ngày 1 tháng 8 năm 2012 lúc 18:15Aug 1, 2012 at 18:15

Hướng dẫn how to shuffle index in python - cách xáo trộn chỉ mục trong python

Kojirokojirokojiro

72K18 Huy hiệu vàng134 Huy hiệu bạc194 Huy hiệu đồng18 gold badges134 silver badges194 bronze badges

2

Nếu bạn sẵn sàng cài đặt thêm một vài gói:

REQ: NUMPY (> = 1.6.1), SCIPY (> = 0.9).

Cài đặt PIP -U Scikit -learn

from sklearn.utils import shuffle
list_1, list_2 = shuffle(list_1, list_2)

Đã trả lời ngày 14 tháng 1 năm 2017 lúc 10:47Jan 14, 2017 at 10:47

Nếu bạn phải làm điều này thường xuyên, bạn có thể xem xét thêm một cấp độ Indention bằng cách xáo trộn danh sách các chỉ mục.

Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> a = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
>>> b = [2, 4, 6, 8, 10]
>>> indexes = range(len(a))
>>> indexes
[0, 1, 2, 3, 4]
>>> random.shuffle(indexes)
>>> indexes
[4, 1, 2, 0, 3]
>>> for index in indexes:
...     print a[index], b[index]
...
[9, 10] 10
[3, 4] 4
[5, 6] 6
[1, 2] 2
[7, 8] 8

Đã trả lời ngày 1 tháng 8 năm 2012 lúc 18:16Aug 1, 2012 at 18:16

Jeremy Brownjeremy BrownJeremy Brown

17.3k3 Huy hiệu vàng34 Huy hiệu bạc27 Huy hiệu đồng3 gold badges34 silver badges27 bronze badges

Cho đến nay, tất cả các giải pháp đã tạo ra các danh sách mới để giải quyết vấn đề. Nếu danh sách A và B rất dài, bạn có thể muốn xáo trộn chúng tại chỗ. Vì vậy, bạn sẽ cần một chức năng như:

import random

def shuffle(a,b):
    assert len(a) == len(b)
    start_state = random.getstate()
    random.shuffle(a)
    random.setstate(start_state)
    random.shuffle(b)

a = [1,2,3,4,5,6,7,8,9]
b = [11,12,13,14,15,16,17,18,19]
shuffle(a,b)
print(a) # [9, 7, 3, 1, 2, 5, 4, 8, 6]
print(b) # [19, 17, 13, 11, 12, 15, 14, 18, 16]

SMTTSP

3,8313 huy hiệu vàng32 Huy hiệu bạc60 Huy hiệu đồng3 gold badges32 silver badges60 bronze badges

Đã trả lời ngày 17 tháng 4 năm 2018 lúc 16:36Apr 17, 2018 at 16:36

Hướng dẫn how to shuffle index in python - cách xáo trộn chỉ mục trong python

AlexConfusSalalExconfuseAlexConfused

7111 Huy hiệu vàng8 Huy hiệu bạc15 Huy hiệu đồng1 gold badge8 silver badges15 bronze badges

Câu trả lời nhanh bằng cách sử dụng Numpy, vui lòng tham khảo tại đây: Bạn có thể sử dụng
You can use

p = numpy.random.permutation(len(a))

Để tạo một danh sách các chỉ mục mới cho cả hai danh sách và sử dụng nó để sắp xếp lại chúng.

Trong kịch bản của bạn:

In [61]: a = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
In [62]: b = [2, 4, 6, 8, 10]
In [63]: import numpy as np
In [64]: a_ar, b_ar = np.array(a), np.array(b)
In [65]: p = np.random.permutation(len(a))
In [66]: a, b = a_ar[p].tolist(), b_ar[p].tolist()
In [68]: a
Out[68]: [[3, 4], [7, 8], [5, 6], [1, 2], [9, 10]]
In [69]: b
Out[69]: [4, 8, 6, 2, 10]

Lerner Zhang

5.4802 Huy hiệu vàng42 Huy hiệu bạc57 Huy hiệu đồng2 gold badges42 silver badges57 bronze badges

Đã trả lời ngày 18 tháng 9 năm 2016 lúc 10:02Sep 18, 2016 at 10:02

Hướng dẫn how to shuffle index in python - cách xáo trộn chỉ mục trong python

Bạn có thể làm một giải nén ở cuối để hạn chế sự lúng túng một chút?

import numpy as np
list1 = [1,2,3]
list2 = [4,5,7]
list_zipped = list(zip(list1,list2))
np.random.shuffle(list_zipped)
list1,list2 = zip(*z) #unzipping

Đã trả lời ngày 16 tháng 10 năm 2019 lúc 9:56Oct 16, 2019 at 9:56

ArunarunArun

15111 Huy hiệu đồng11 bronze badges

Tôi không chắc liệu tôi có thiếu thứ gì đó ở đây không, nhưng có vẻ như bạn chỉ cần xáo trộn 1 danh sách và cái còn lại được sắp xếp lại để phù hợp với thứ tự của danh sách đầu tiên. Vì vậy, những gì bạn có là cách tốt nhất để làm điều này mà không làm cho nó phức tạp hơn. Nếu bạn muốn đi theo con đường phức tạp, bạn chỉ có thể xáo trộn 1 danh sách và sử dụng danh sách không được phân chia để thực hiện tra cứu trong danh sách xáo trộn và sắp xếp lại nó theo cách đó. Cuối cùng, bạn kết thúc với kết quả tương tự bạn bắt đầu. Tại sao tạo ra một danh sách thứ ba là một vấn đề? Nếu bạn thực sự muốn tái chế các danh sách thì bạn chỉ cần thay thế Danh sách B bằng những gì bạn đang sử dụng cho Danh sách C và sau đó tách nó ra sau trở lại A và B.

Đã trả lời ngày 1 tháng 8 năm 2012 lúc 18:17Aug 1, 2012 at 18:17

minhaz1minhaz1minhaz1

7131 Huy hiệu vàng5 Huy hiệu bạc13 Huy hiệu đồng1 gold badge5 silver badges13 bronze badges

Phiên bản sửa đổi của cách tiếp cận của AlexConfuse, nói chung và được sao chép và sử dụng trực tiếp:

from random import shuffle, getstate, setstate


def shuffle_inplace(lst, state):
    """ shuffle multiple lists in-place using order determined by state """
    setstate(state)
    shuffle(lst)


lst1 = [0, 1, 2, 3, 4]
lst2 = [5, 6, 7, 8, 9]

s = getstate()
shuffle_inplace(lst1, s)
shuffle_inplace(lst2, s)

print(lst1)
print(lst2)

Đã trả lời ngày 29 tháng 3 lúc 16:08Mar 29 at 16:08

Hướng dẫn how to shuffle index in python - cách xáo trộn chỉ mục trong python

2

Làm thế nào để bạn xáo trộn dữ liệu trong Python?

Một trong những cách dễ nhất để xáo trộn một khung dữ liệu gấu trúc là sử dụng phương pháp mẫu Pandas. DF. Phương pháp mẫu cho phép bạn lấy mẫu một số hàng trong khung dữ liệu gấu trúc theo thứ tự ngẫu nhiên. Bởi vì điều này, chúng tôi chỉ cần chỉ định rằng chúng tôi muốn trả về toàn bộ DataFrame của Pandas, theo thứ tự ngẫu nhiên.use the Pandas sample method. The df. sample method allows you to sample a number of rows in a Pandas Dataframe in a random order. Because of this, we can simply specify that we want to return the entire Pandas Dataframe, in a random order.

Làm cách nào để xáo trộn một nhãn hiệu trong Python?

Cách tiếp cận 1: Sử dụng số lượng các phần tử trong dữ liệu của bạn, tạo một chỉ mục ngẫu nhiên bằng cách sử dụng hoán vị chức năng (). Sử dụng chỉ số ngẫu nhiên đó để xáo trộn dữ liệu và nhãn.Cách tiếp cận 2: Bạn cũng có thể sử dụng mô -đun shuffle () của sklearn để chọn ngẫu nhiên dữ liệu và nhãn theo cùng một thứ tự.Using the number of elements in your data, generate a random index using function permutation(). Use that random index to shuffle the data and labels. Approach 2: You can also use the shuffle() module of sklearn to randomize the data and labels in the same order.

Bạn có thể xáo trộn một mảng trong Python không?

Shuffle một mảng trong Python bằng cách sử dụng ngẫu nhiên.Phương thức Shuffle () lấy một chuỗi làm đầu vào và xáo trộn nó.Điều quan trọng cần lưu ý ở đây là ngẫu nhiên.Shuffle () không trả về một chuỗi mới làm đầu ra mà thay vào đó là xáo trộn chuỗi gốc.shuffle() method takes a sequence as input and shuffles it. The important thing to note here is that the random. shuffle() does not return a new sequence as output but instead shuffles the original sequence.

Tôi có thể xáo trộn từ điển trong Python không?

Xáo trộn một từ điển là không thể trong Python.Tuy nhiên, chúng ta có thể sắp xếp lại thứ tự các khóa của một từ điển.Tìm nạp tất cả các phím từ một từ điển như một danh sách.Xáo trộn danh sách đó và truy cập các giá trị từ điển bằng cách sử dụng các khóa xáo trộn.. However, we can rearrange the order of keys of a dictionary. Fetch all keys from a dictionary as a list. Shuffle that list and access dictionary values using shuffled keys.