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


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.