Random.sample يُرجع الأحرف فقط بدلاً من السلاسل
-
05-07-2019 - |
سؤال
هذا نوع من الأسئلة للمبتدئين، لكن لم أتمكن من إيجاد حل.قرأت قائمة سلاسل من ملف، وحاولت الحصول على عينة عشوائية مكونة من 5 عناصر باستخدام Random.sample، لكن القائمة الناتجة تحتوي على أحرف فقط.لماذا هذا؟كيف يمكنني الحصول على قائمة عينة عشوائية من السلاسل؟
هذا ما افعله:
names = random.sample( open('names.txt').read(), 5 )
print names
وهذا يعطي قائمة أحرف مكونة من خمسة عناصر مثل:
['\x91', 'h', 'l', 'n', 's']
إذا قمت بحذف جزء Random.sample، وقمت بطباعة القائمة، فسيتم طباعة كل سطر من الملف، وهو السلوك المتوقع، ويثبت أن الملف قد تمت قراءته بشكل جيد.
المحلول
إذا كانت الأسماء كلها في أسطر منفصلة، قم بما يلي:
names = random.sample(open('names.txt').readlines(), count)
print names
أنت تخطئ في الأساس لأنك تحتاج إلى تمرير Interable إلى random.sample()
.عندما تقوم بتمرير سلسلة، يتم التعامل معها كقائمة.إذا كانت أسماءك كلها في سطر واحد، فأنت بحاجة إلى استخدام split()
لتفكيكهم وتمرير تلك القائمة إلى random.sample()
.