आप सूची में प्रत्येक तत्व को एक इंट द्वारा कैसे विभाजित करते हैं?


154

मैं बस सूची में प्रत्येक तत्व को एक इंट द्वारा विभाजित करना चाहता हूं।

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)

लेकिन क्या ऐसा करने का एक आसान / तेज तरीका है?

जवाबों:


233

मुहावरेदार तरीका सूची समझ का उपयोग करना होगा:

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
एक स्थिर सूची का आकार दिया गया, क्या इनमें से कोई भी तरीका [mylist [0] / myint, mylist [1] / myint] से अधिक तेज़ होगा
उपयोगकर्ता-2147482637

7
@ user1938107 लगभग निश्चित रूप से नहीं, लेकिन यह भी एक प्रकार का सूक्ष्म अनुकूलन है जिसे आपको किसी भी तरह से बचना चाहिए।
आत्माचेक

75

जिस तरह से आपने पहले प्रयास किया वह वास्तव में सीधे खाँसी के साथ संभव है :

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

यदि आप लंबी सूची और विशेष रूप से किसी भी प्रकार की वैज्ञानिक कंप्यूटिंग परियोजना के साथ इस तरह के संचालन करते हैं, तो मैं वास्तव में संख्यात्मक उपयोग करने की सलाह दूंगा।


4
मुझे पता है कि यह एक पुराना उत्तर है, लेकिन फिर भी इसे पढ़ने वाले किसी भी व्यक्ति के लिए: ध्यान रखें कि जब numpy.array का उपयोग करते हैं, तो आपको loat के लिए उदाहरण के numpy.array([10,20,30,40,50,60,70,80,90], dtype='f')लिए प्रकार निर्दिष्ट करना चाहिए । अन्यथा 3 से भाग देने से आपको 3.33 के बजाय परिणाम के रूप में सिर्फ 3 मिलेंगे ..
रिचर्ड

3
@RichardBoonen इस मामले में ओपी इंट डिवीजन करना चाहता था, लेकिन अगर आप फ्लोट डिवीजन करना चाहते हैं, तो आप सही हैं, आपको टाइप करने के लिए निर्दिष्ट करना होगा। या सूची में एक एकल फ्लोट 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]

क्या आपको लगता है कि इस मामले में सूची समझ से बेहतर है? मैं सोच रहा हूं कि मैं सूची बोध के लिए चला गया, क्योंकि यह पढ़ना आसान है।
एंड्रयू कॉक्स

@AndrewCox मैं मानचित्र पसंद करता हूं (एक गैर अजगर पृष्ठभूमि से आने वाला)। सूची की समझ मुझे भी साफ-सुथरी लगती है, इसलिए आपको शायद उसी के साथ जाना चाहिए।
डॉगबर्ट

क्या आप जानते हैं कि यह समाधान सोलिटेक और बेर्कंटक पोस्ट से तेज है?
कासा

@ कैसा: किसी ने इस पर stackoverflow.com/q/1247490 का परीक्षण किया । यह निष्कर्ष ऐसा लगता है कि सूची की जीत इस विशेष मामले में जीत है।
ब्रायन

4
आजकल map()एक मैप ऑब्जेक्ट देता है, इसलिए यदि आप एक सूची चाहते हैं तो आपको स्पष्ट रूप से कहना होगा list()। तो इस मामले में:newList = list(map(lambda x: x/myInt, myList))
robertmartin8


6

सार संस्करण हो सकता है:

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.