Python-da aralashish

Python'dagi aralashtirilgan qatorni qayta o'rniga qaytarish o'rniga oddiy usul bormi?

Masalan, o'rniga

x = [array]
random.shuffle(x)

Men shunga o'xshash narsani qidiraman

y = shuffle(x)

xni ushlab turadi.

Esda tutingki, men funktsiyani izlamayman, o'xshash emas:

x=[array]
y=x
random.shuffle(x)
14
2009 yilda python-g'oyalardagi postda muhokama qilingan, chunki siz tushkunlikka tushasiz, chunki y = tartibida (yourList, key = lambda x: random.random ()) yozishingiz mumkin. Qarang: mail.python.org/pipermail/python-ideas/ 2009-Mart/003661.htm & zwnj; l
qo'shib qo'ydi muallif Russell Borogove, manba

6 javoblar

sYokited with a key function that returns a random value:

impYokit random
sYokited(l, key=lambda *args: random.random())

Yoki

impYokit os
sYokited(l, key=os.urandom)
17
qo'shib qo'ydi
Bu qisqa, ammo O (n log n) kabi tarozilar, kirish ro'yxatining nusxasi random.shuffle esa u (n) dir. Malumot: en.wikipedia.org/wiki/Shuffling#Shuffling_algorithms
qo'shib qo'ydi muallif EOL, manba
Ikkinchisini qatorlar qatoriga qo'yish natijasida: tartiblangan (a, key = os.urandom) TypeError: 'str' ob'ektini aniq raqam sifatida talqin qilish mumkin emas. Birinchisini qilish, kutilganidek edi. Menimcha, qatorlar qatoriga qanday qilib ish qilish mumkin?
qo'shib qo'ydi muallif ntk4, manba

random yordamida o'zingizni amalga oshirish juda oson. Buni quyidagicha yozaman:

def shuffle(l):
    l2 = l[:]           #copy l into l2
    random.shuffle(l2)  #shuffle l2
    return l2           #return shuffled l2
11
qo'shib qo'ydi
+1: bu O (n), tartibida (..., key = os.urandom) esa O (n log n).
qo'shib qo'ydi muallif EOL, manba

Faqat o'zingizni yozing.

import random

def shuffle(x):
    x = list(x)
    random.shuffle(x)
    return x

x = range(10)
y = shuffle(x)
print x # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print y # [2, 5, 0, 4, 9, 3, 6, 1, 7, 8]
8
qo'shib qo'ydi
@Jeff, dasturlarda ishlatiladigan o'z kutubxonangizni yaratishda hech qanday xato yo'q. Va agar bir nechta sabablarga ko'ra bitta fayl dasturini yozsangiz, matnni faqat yangi dasturni yaratganingiz kabi nusxa ko'chirishingiz yoki eng sevimli matn muharriri ichida snippetka aylantirishingiz mumkin ... +1
qo'shib qo'ydi muallif Keldon Alleyne, manba
Python standart kutubxonasiga sehrli ravishda biror narsa qo'shishni xohlaysizmi? Nima uchun siz yozgan "barcha dasturlarda" nusxalari ni aralashtirilgan bo'lishi kerak?
qo'shib qo'ydi muallif FogleBird, manba
Rahmat, lekin men kuch sarflashga harakat qilyapman - bu yozgan barcha dasturlarga qo'shib qo'yish kerak, faqat original formuladan foydalaning.
qo'shib qo'ydi muallif Jeff, manba
Sehrli ravishda hech narsa qilishni xohlamayman, men oddiygina kutubxonada bunday funktsiyaning mavjudmi yoki yo'qligini so'rayapman. Menga nusxalar kerak emas, x = aralashtirilgan ([1 2 3 4 5]) kabi qatorni belgilashni xohlayman, buning uchun ikkita satrni belgilash kerak.
qo'shib qo'ydi muallif Jeff, manba
@avasopht bu bilan hech qanday yomon narsa yo'q, faqat men qidirayotgan narsa emas edi
qo'shib qo'ydi muallif Jeff, manba

Siz qidirayotgan vazifangiz yo'q. Faqat nusxa ko'chiring.

5
qo'shib qo'ydi

Ro'yxat yoki qator uchun numpy.random.permutation dan foydalanishingiz mumkin, lekin sizda numpy qatori mavjud bo'lsa, to'g'ri funksiya. Aralash turdagi ro'yxatlar uchun numpy qatoriga aylantirish turi o'zgarishlarini amalga oshiradi.

import numpy as np
my_list = ['foo', 'bar', 'baz', 42]
print list(np.random.permutation(my_list))
# ['bar', 'baz', '42', 'foo']
2
qo'shib qo'ydi
Ushbu savolga eng yaxshi yechim!
qo'shib qo'ydi muallif Ohumeronen, manba

Buni demo sifatida ishlatish boshqa joylarda shunday deb o'ylashimiz mumkin:

import random

x = shuffleThis(x)


def shuffleThis(y):
    random.shuffle(y)
    return(y)
#end of Shuffle Function

Umid qilamanki bu foydali.

0
qo'shib qo'ydi
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming