Cara menggunakan shuffle word python

View Discussion

Show

Improve Article

Save Article

  • Read
  • Discuss
  • View Discussion

    Improve Article

    Save Article

    With the help of numpy.random.shuffle() method, we can get the random positioning of different integer values in the numpy array or we can say that all the values in an array will be shuffled randomly.

    Syntax : numpy.random.shuffle(x)

    Return : Return the reshuffled numpy array.

    Example #1 :

    In this example we can see that by using numpy.random.shuffle() method, we are able to do the reshuffling of values in the numpy array or change the positions of values in an array.

    Python3

    import numpy as np

    import matplotlib.pyplot as plt

    gfg = np.arange(10)

    np.random.shuffle(gfg)

    print(gfg)

    Output :

    [7 1 5 0 8 4 3 9 6 2]

    Example #2 :

    Python3

    import numpy as np

    import matplotlib.pyplot as plt

    gfg = np.arange(16).reshape((4, 4))

    np.random.shuffle(gfg)

    print(gfg)

    Output :

    [[ 4  5  6  7]

    [ 0  1  2  3]

    [ 8  9 10 11]

    [12 13 14 15]]

    Saya memiliki daftar objek dengan Python dan saya ingin mengocoknya. Saya pikir saya bisa menggunakan metode random.shuffle, tetapi ini tampaknya gagal ketika daftar objek. Apakah ada metode untuk mengocok objek atau cara lain untuk mengatasi ini?

    import random
    
    class a:
        foo = "bar"
    
    a1 = a()
    a2 = a()
    b = [a1,a2]
    
    print random.shuffle(b)
    

    Ini akan gagal.

    random.shuffle harus bekerja. Berikut ini contoh, di mana objek adalah daftar:

    from random import shuffle
    x = [[i] for i in range(10)]
    shuffle(x)
    
    # print x  gives  [[9], [2], [7], [0], [4], [5], [3], [1], [8], [6]]
    # of course your results will vary
    

    Perhatikan bahwa shuffle bekerja di tempat , dan mengembalikan Tidak Ada.

    Ketika Anda mengetahui pengocokan di tempat adalah masalahnya. Saya juga sering mengalami masalah, dan sepertinya sering lupa cara menyalin daftar juga. Menggunakan sample(a, len(a)) adalah solusinya, menggunakan len(a) sebagai ukuran sampel. Lihat https://docs.python.org/3.6/library/random.html#random.sample untuk dokumentasi Python.

    Berikut adalah versi sederhana menggunakan random.sample() yang mengembalikan hasil acak sebagai daftar baru.

    import random
    
    a = range(5)
    b = random.sample(a, len(a))
    print a, b, "two list same:", a == b
    # print: [0, 1, 2, 3, 4] [2, 1, 3, 4, 0] two list same: False
    
    # The function sample allows no duplicates.
    # Result can be smaller but not larger than the input.
    a = range(555)
    b = random.sample(a, len(a))
    print "no duplicates:", a == list(set(b))
    
    try:
        random.sample(a, len(a) + 1)
    except ValueError as e:
        print "Nope!", e
    
    # print: no duplicates: True
    # print: Nope! sample larger than population
    

    Butuh beberapa waktu untuk mendapatkannya juga. Tetapi dokumentasi untuk shuffle sangat jelas:

    daftar acak x di tempat ; return Tidak ada.

    Jadi Anda seharusnya tidak print random.shuffle(b). Alih-alih lakukan random.shuffle(b) dan kemudian print b.

    #!/usr/bin/python3
    
    import random
    
    s=list(range(5))
    random.shuffle(s) # << shuffle before print or assignment
    print(s)
    
    # print: [2, 4, 1, 3, 0]
    
    >>> import random
    >>> a = ['hi','world','cat','dog']
    >>> random.shuffle(a,random.random)
    >>> a
    ['hi', 'cat', 'dog', 'world']
    

    Ini bekerja dengan baik untuk saya. Pastikan untuk mengatur metode acak.

    Jika Anda memiliki beberapa daftar, Anda mungkin ingin menentukan permutasi (cara Anda mengacak daftar/mengatur ulang item dalam daftar) pertama dan kemudian menerapkannya ke semua daftar:

    import random
    
    perm = list(range(len(list_one)))
    random.shuffle(perm)
    list_one = [list_one[index] for index in perm]
    list_two = [list_two[index] for index in perm]
    

    Numpy/Scipy

    Jika daftar Anda adalah array yang numpy, itu lebih sederhana:

    import numpy as np
    
    perm = np.random.permutation(len(list_one))
    list_one = list_one[perm]
    list_two = list_two[perm]
    

    mpu

    Saya telah membuat paket utilitas kecil mpu yang memiliki fungsi consistent_shuffle :

    import mpu
    
    # Necessary if you want consistent results
    import random
    random.seed(8)
    
    # Define example lists
    list_one = [1,2,3]
    list_two = ['a', 'b', 'c']
    
    # Call the function
    list_one, list_two = mpu.consistent_shuffle(list_one, list_two)
    

    Perhatikan bahwa mpu.consistent_shuffle mengambil sejumlah argumen yang berubah-ubah. Jadi, Anda juga dapat mengacak tiga daftar atau lebih dengannya.

    from random import random
    my_list = range(10)
    shuffled_list = sorted(my_list, key=lambda x: random())
    

    Alternatif ini mungkin berguna untuk beberapa aplikasi di mana Anda ingin menukar fungsi pemesanan.

    Dalam beberapa kasus ketika menggunakan array numpy, menggunakan random.shuffle membuat data duplikat dalam array.

    Alternatifnya adalah menggunakan numpy.random.shuffle. Jika Anda sudah menggunakan numpy, ini adalah metode yang lebih disukai daripada random.shuffle generik.

    numpy.random.shuffle

    Contoh

    >>> import numpy as np
    >>> import random
    

    Menggunakan random.shuffle:

    >>> foo = np.array([[1,2,3],[4,5,6],[7,8,9]])
    >>> foo
    
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    
    
    >>> random.shuffle(foo)
    >>> foo
    
    array([[1, 2, 3],
           [1, 2, 3],
           [4, 5, 6]])
    

    Menggunakan numpy.random.shuffle:

    >>> foo = np.array([[1,2,3],[4,5,6],[7,8,9]])
    >>> foo
    
    array([[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9]])
    
    
    >>> np.random.shuffle(foo)
    >>> foo
    
    array([[1, 2, 3],
           [7, 8, 9],
           [4, 5, 6]])
    

    'print func (foo)' akan mencetak nilai balik dari 'func' ketika dipanggil dengan 'foo'. 'shuffle' namun tidak memiliki None sebagai jenis kembalinya, karena daftar akan diubah pada tempatnya, maka ia tidak mencetak apa pun. Penanganan masalah:

    # shuffle the list in place 
    random.shuffle(b)
    
    # print it
    print(b)
    

    Jika Anda lebih menyukai gaya pemrograman fungsional, Anda mungkin ingin membuat fungsi wrapper berikut:

    def myshuffle(ls):
        random.shuffle(ls)
        return ls
    
    import random
    
    class a:
        foo = "bar"
    
    a1 = a()
    a2 = a()
    a3 = a()
    a4 = a()
    b = [a1,a2,a3,a4]
    
    random.shuffle(b)
    print(b)
    

    shuffle sudah tersedia, jadi jangan cetak hasilnya, yang None, tetapi daftar.

    Seseorang dapat mendefinisikan fungsi yang disebut shuffled (dalam arti yang sama sort vs sorted)

    def shuffled(x):
        import random
        y = x[:]
        random.shuffle(y)
        return y
    
    x = shuffled([1, 2, 3, 4])
    print x
    

    Untuk one-liners, gunakanrandom.sample(list_to_be_shuffled, length_of_the_list) dengan contoh:

    import random
    random.sample(list(range(10)), 10)
    

    output: [2, 9, 7, 8, 3, 0, 4, 1, 6, 5]

    anda bisa membangun fungsi yang menggunakan daftar sebagai parameter dan mengembalikan versi daftar yang diacak:

    from random import *
    
    def listshuffler(inputlist):
        for i in range(len(inputlist)):
            swap = randint(0,len(inputlist)-1)
            temp = inputlist[swap]
            inputlist[swap] = inputlist[i]
            inputlist[i] = temp
        return inputlist
    
    def shuffle(_list):
        if not _list == []:
            import random
            list2 = []
            while _list != []:
                card = random.choice(_list)
                _list.remove(card)
                list2.append(card)
            while list2 != []:
                card1 = list2[0]
                list2.remove(card1)
                _list.append(card1)
            return _list
    

    Anda bisa melakukannya untuk ini:

    >>> A = ['r','a','n','d','o','m']
    >>> B = [1,2,3,4,5,6]
    >>> import random
    >>> random.sample(A+B, len(A+B))
    [3, 'r', 4, 'n', 6, 5, 'm', 2, 1, 'a', 'o', 'd']
    

    jika Anda ingin kembali ke dua daftar, Anda kemudian membagi daftar panjang ini menjadi dua.

    Pastikan Anda tidak menamai file sumber Anda random.py, dan bahwa tidak ada file di direktori kerja Anda yang disebut random.pyc .. dapat menyebabkan program Anda mencoba dan mengimpor file random.py lokal Anda alih-alih modul ular sanca .

    """ to shuffle random, set random= True """
    
    def shuffle(x,random=False):
         shuffled = []
         ma = x
         if random == True:
             rando = [ma[i] for i in np.random.randint(0,len(ma),len(ma))]
             return rando
         if random == False:
              for i in range(len(ma)):
              ave = len(ma)//3
              if i < ave:
                 shuffled.append(ma[i+ave])
              else:
                 shuffled.append(ma[i-ave])    
         return shuffled
    
    import random
    class a:
        foo = "bar"
    
    a1 = a()
    a2 = a()
    b = [a1.foo,a2.foo]
    random.shuffle(b)
    

    anda bisa menggunakan shuffle atau sampel. keduanya berasal dari modul acak.

    import random
    def shuffle(arr1):
        n=len(arr1)
        b=random.sample(arr1,n)
        return b
    

    OR

    import random
    def shuffle(arr1):
        random.shuffle(arr1)
        return arr1