2010-09-16 13 views
5

मान लें कि मेरे पास दो डेटा सेट हैं। मेरे पास एक हफ्ते के हफ्ते के आंकड़े हैं जिन्होंने मेरी सेवा की कोशिश की।पायथन में किसी अन्य सूची के संबंधित सदस्यों द्वारा सूची के सदस्यों को मैं कैसे विभाजित करूं?

trials = [2,2,2,8,8,4] 

और मैं परीक्षण उपयोगकर्ताओं के सप्ताह संख्या जिन्होंने प्रवेश द्वारा एक सप्ताह की है।

conversion_rate = [] 
for n in range(len(trials)): 
    conversion_rate.append(conversions[n]/trials[n]) 

आप एक और अधिक सुरुचिपूर्ण रास्ता के बारे में सोच सकता है:

conversions = [1,0,2,4,8,3] 

मैं यह बहुत जल्दी से इस तरह से कर सकते हैं?

बोनस: इसका परिणाम इनट्स की सूची [0, 0, 1, 0, 1, 0] , फ्लोट की सूची नहीं है। फ्लोट्स की सूची पाने का सबसे आसान तरीका क्या है?

+1

पहले तो मुझे 'zipWith' साथ जवाब देने के लिए जा रहा था, लेकिन तब मुझे एहसास हुआ कि यह अजगर में मौजूद नहीं है। कितना दुखद ... – Daenyth

उत्तर

15

उपयोग जिप:

[c/t for c,t in zip(conversions, trials)] 

तैरता प्राप्त करने के लिए सबसे खूबसूरत तरीका अजगर 3.x. को उन्नत करने के लिए है

तो आप लिख सकते आप पायथन 2.x उपयोग करने के लिए की जरूरत है:

>>> [float(c)/t for c,t in zip(conversions, trials)] 
[0.5, 0.0, 1.0, 0.5, 1.0, 0.75] 

वैकल्पिक रूप से आप अपनी फ़ाइल के शुरू में इस जोड़ सकते हैं:

from __future__ import division 

लेकिन ध्यान दें कि इस इच्छा अपने कार्यक्रम में हर जगह विभाजन के व्यवहार को प्रभावित है, तो आप अगर कोई स्थानों पर जहां आप पूर्णांक विभाजन चाहते हैं और यदि ऐसा है तो // बजाय / बारे में कर रहे हैं देखने के लिए ध्यान से जांच की जरूरत है।

+0

मेरे पास 'q = [[7,2,3], [4,5,6]]' और 'r = [[6,1,2], [3,4,5]] है '। मुझे संबंधित तत्वों को विभाजित करने की आवश्यकता है। 'बी = [[फ्लोट (जे)/फ्लोट (i) जे में क्यू के लिए] मैं आर में]'। हालांकि, मुझे एक त्रुटि मिलती है: TypeError: float() तर्क एक स्ट्रिंग या संख्या होना चाहिए। मैंने भविष्य से विभाजन आयात किया है। कोई सुझाव? पाठ्यक्रम के – Biotechgeek

2

कैसे

के बारे में
trials = [2,2,2,8,8,4] 
conversions = [1,0,2,4,8,3] 
conversion_rate = [conversion/trials[n] for n, conversion in enumerate(conversions)] 
+0

ज़िप। मार्क बायर्स 'एक बेहतर जवाब है और मैं इसे वोट दें हैं तो मैं प्रयास :) – Day

+1

+1 था। अब मैं मार्क के जवाब को ऊपर उठा सकता हूं;) – Skilldrick

+0

@Skilldrick हे धन्यवाद के लिए पर्याप्त प्रतिनिधि – Day

1

आप numpy का उपयोग करने की हो, तो आपको निम्न विचारों का प्रयोग कर सकते हैं: प्रसारण का उपयोग कर

import numpy as np 
conversion_rate = np.divide(trials, conversions) 

या,:

import numpy as np 
trials = np.array([2, 2, 2, 8, 8, 4]) 
conversions = np.array([1, 0, 2, 4, 8, 3]) 
conversion_rate = 1.0 * trials/conversions 
2

ज़िप का उपयोग कर के बिना और फ्लोट:

[1.0*conversions[n]/trials[n] for n in xrange(len(trials))] 
संबंधित मुद्दे

 संबंधित मुद्दे