اگر می خواهید عناصر یک لیست (آرایه) را در پایتون به هم بزنید (به صورت تصادفی مرتب کنید)، از ماژول تصادفی کتابخانه استاندارد استفاده کنید.
دو تابع وجود دارد: shuffle()، که به طور تصادفی لیست اصلی را مرتب می کند، و sample()، که یک لیست جدید به طور تصادفی مرتب شده را برمی گرداند. نمونه () را می توان برای رشته ها و تاپل ها استفاده کرد.
- فهرست اصلی را به هم بزنید:
random.shuffle()
- یک لیست جدید و به هم ریخته ایجاد کنید.:
random.sample()
- رشته ها و تاپل ها را به هم بزنید
- دانه اعداد تصادفی را ثابت کنید
اگر می خواهید به جای تصادفی یا به ترتیب معکوس به ترتیب صعودی یا نزولی مرتب کنید، مقاله زیر را ببینید.
فهرست اصلی را به هم بزنید:random.shuffle()
تابع shuffle() در ماژول تصادفی می تواند به طور تصادفی لیست اصلی را مرتب کند.
import random
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
random.shuffle(l)
print(l)
# [1, 0, 4, 3, 2]
یک لیست جدید و به هم ریخته ایجاد کنید.:random.sample()
تابع نمونه () در ماژول تصادفی می تواند برای ایجاد یک لیست جدید که به طور تصادفی مرتب شده است، بدون تغییر لیست اصلی استفاده شود.
نمونه () تابعی است که به صورت تصادفی یک عنصر را از یک لیست انتخاب و بازیابی می کند. آرگومان اول یک لیست است و آرگومان دوم تعداد عناصری است که باید بازیابی شوند. برای جزئیات بیشتر به مقاله زیر مراجعه کنید.
اگر تعداد عناصری که باید توسط sample() انتخاب شوند، تعداد کل عناصر در لیست باشد، یک لیست جدید دریافت می کنیم که همه عناصر به طور تصادفی مرتب شده اند. تعداد کل عناصر در لیست با len() بدست می آید.
شی اصلی تغییر نخواهد کرد.
l = list(range(5))
print(l)
# [0, 1, 2, 3, 4]
lr = random.sample(l, len(l))
print(lr)
# [0, 3, 1, 4, 2]
print(l)
# [0, 1, 2, 3, 4]
رشته ها و تاپل ها را به هم بزنید
رشته ها و تاپل ها تغییر ناپذیر هستند، بنابراین اگر از random.shuffle() برای تغییر شی اصلی استفاده کنید، خطای زیر را دریافت خواهید کرد.TypeError
s = 'abcde'
# random.shuffle(s)
# TypeError: 'str' object does not support item assignment
t = tuple(range(5))
print(t)
# (0, 1, 2, 3, 4)
# random.shuffle(t)
# TypeError: 'tuple' object does not support item assignment
اگر می خواهید یک رشته یا تاپل را به هم بزنید، از random.sample() استفاده کنید که یک شی جدید ایجاد می کند.
حتی زمانی که یک رشته یا تاپل به عنوان آرگومان مشخص میشود، ()random.sample یک لیست را برمیگرداند، بنابراین لازم است آن را به یک رشته یا تاپل پردازش کنید.
در مورد یک رشته، لیستی از کاراکترها یک به یک خواهد بود. برای الحاق مجدد آنها به یک رشته، از متد join() استفاده کنید.
sr = ''.join(random.sample(s, len(s)))
print(sr)
# bedca
برای تاپل ها از tuple() استفاده کنید که یک تاپل از یک لیست ایجاد می کند.
tr = tuple(random.sample(t, len(l)))
print(tr)
# (0, 1, 2, 4, 3)
دانه اعداد تصادفی را ثابت کنید
با دادن یک عدد صحیح دلخواه به تابع seed() ماژول تصادفی، می توان seed اعداد تصادفی را ثابت کرد و مولد اعداد تصادفی را می توان مقدار دهی اولیه کرد.
پس از مقداردهی اولیه با همان seed، همیشه به همان روش مرتب می شود.
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]
l = list(range(5))
random.seed(0)
random.shuffle(l)
print(l)
# [2, 1, 0, 4, 3]