আপনি কীভাবে প্রতিটি তালিকার প্রতিটি উপাদানকে একটি ইন্ট দ্বারা ভাগ করবেন?


153

আমি কেবলমাত্র প্রতিটি তালিকাকে একটি int দ্বারা বিভক্ত করতে চাই।

myList = [10,20,30,40,50,60,70,80,90]
myInt = 10
newList = myList/myInt

এটি ত্রুটি:

TypeError: unsupported operand type(s) for /: 'list' and 'int'

আমি বুঝতে পারি কেন আমি এই ত্রুটিটি পাচ্ছি। তবে আমি হতাশ হয়েছি যে আমি কোনও সমাধান খুঁজে পাচ্ছি না।

চেষ্টাও করেছেন:

newList = [ a/b for a, b in (myList,myInt)]

ত্রুটি:

ValueError: too many values to unpack

প্রত্যাশিত ফলাফল:

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


সম্পাদনা করুন:

নিম্নলিখিত কোডটি আমার প্রত্যাশিত ফলাফল দেয়:

newList = []
for x in myList:
    newList.append(x/myInt)

তবে এটি করার কি আরও সহজ / দ্রুত উপায় আছে?

উত্তর:


232

বুদ্ধিমান উপায় তালিকা বোধগম্যতা ব্যবহার করা হবে:

myList = [10,20,30,40,50,60,70,80,90]
myInt = 10
newList = [x / myInt for x in myList]

বা, যদি আপনার মূল তালিকার রেফারেন্স বজায় রাখা দরকার:

myList[:] = [x / myInt for x in myList]

1
একটি স্থিতিশীল তালিকা আকার দেওয়া, এই পদ্ধতিগুলির যে কোনওটি [মাইলিস্ট [0] / মাইনিট, মাইলিস্ট [1] / মাইন্ট]
— ব্যবহারকারী-2147482637

7
@ ব্যবহারকারী 1938107 অবশ্যই না, তবে এটি মাইক্রো অপ্টিমাইজেশনের ধরণ যা আপনাকে যাইহোক এড়ানো উচিত।
— আত্মা যাচাই

74

আপনি প্রথমে যেভাবে চেষ্টা করেছেন তা আসলে নাম্পির মাধ্যমে সরাসরি সম্ভব :

import numpy
myArray = numpy.array([10,20,30,40,50,60,70,80,90])
myInt = 10
newArray = myArray/myInt

আপনি যদি দীর্ঘ তালিকাগুলি এবং বিশেষত কোনও ধরণের বৈজ্ঞানিক কম্পিউটিং প্রকল্পে এই ধরনের ক্রিয়াকলাপ করেন তবে আমি সত্যিই নিম্প ব্যবহারের পরামর্শ দেব।


4
আমি জানি এটি একটি পুরানো জবাব তবে এখনও যে কেউ এটি পড়ছেন তাদের জন্য: মনে রাখবেন যে numpy.array ব্যবহার করার সময় আপনাকে লোটের জন্য উদাহরণটি টাইপ নির্দিষ্ট করা উচিত numpy.array([10,20,30,40,50,60,70,80,90], dtype='f')। অন্যথায় 3 দ্বারা ভাগ করা আপনাকে 3.333 এর পরিবর্তে ফলস্বরূপ 3 দেয় ...
— রিচার্ড

3
@ রিচার্ড বুনেন এই ক্ষেত্রে ওপি ইন্টিরিয়েশন ডিভিশন করতে চেয়েছিল, তবে আপনি যদি ফ্লোট বিভাগ করতে চান, আপনি ঠিক বলেছেন, আপনাকে টাইপটি নাম্বারে নির্দিষ্ট করতে হবে। বা তালিকায় একটি ভাসা numpy.array([10.,20,30,40,50,60,70,80,90])
— লাগিয়ে দিন

24
>>> myList = [10,20,30,40,50,60,70,80,90]
>>> myInt = 10
>>> newList = map(lambda x: x/myInt, myList)
>>> newList
[1, 2, 3, 4, 5, 6, 7, 8, 9]

আপনি কি মনে করেন এই ক্ষেত্রে তালিকা বোধের চেয়ে মানচিত্রটি ভাল? আমি কেবল ভাবতে ভাবছি যে আমি তালিকা অনুধাবন করতে গিয়েছিলাম, কারণ এটি পড়া সহজ।
— অ্যান্ড্রু কক্স

@ অ্যান্ড্রুকক্স আমি মানচিত্র পছন্দ করি (পাইথন ব্যাকগ্রাউন্ড থেকে আসছে)। তালিকা বোধগম্যতা আমার কাছেও পরিষ্কার মনে হয়, সুতরাং আপনার সম্ভবত এটির সাথে যাওয়া উচিত।
— ডগবার্ট

আপনি কি জানেন যে সলিউশন চেক এবং বেরক্যান্টকের পোস্ট করা সমাধানের চেয়ে এটি দ্রুত হয়?
— কাসা

@Casa: কেউ এই পরীক্ষিত stackoverflow.com/q/1247490 । উপসংহারটি মনে হয় যে এই বিশেষ ক্ষেত্রে তালিকার বোধগম্যতা জিতেছে।
— ব্রায়ান

4
আজকাল map()একটি মানচিত্র অবজেক্ট ফিরিয়ে দেয়, সুতরাং আপনি যদি একটি তালিকা চান তবে আপনাকে স্পষ্ট করে বলতে হবে list()। সুতরাং এই ক্ষেত্রে:newList = list(map(lambda x: x/myInt, myList))
— রবার্টমার্টিন 8


6

বিমূর্ত সংস্করণটি হতে পারে:

import numpy as np
myList = [10, 20, 30, 40, 50, 60, 70, 80, 90]
myInt = 10
newList  = np.divide(myList, myInt)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.