2010-01-31 21 views
6

मैं जानता हूँ कि आप इस तरह से अजगर में आसानी से नेस्ट सूचियां बना सकते हैं:पायथन में नेस्टेड सूचियां कैसे बनाएं?

[[1,2],[3,4]] 

लेकिन यह कैसे शून्यों का एक 3x3x3 मैट्रिक्स बनाने के लिए?

[[[0] * 3 for i in range(0, 3)] for j in range (0,3)] 

या

[[[0]*3]*3]*3 

सही नहीं लग रहे है। इसे किसी विधि में आयामों की सूची उत्तीर्ण करने का कोई तरीका नहीं है? उदाहरण के लिए:

CreateArray([3,3,3]) 

उत्तर

9

मामले में एक मैट्रिक्स वास्तव में आप जो खोज रहे हैं, numpy पैकेज पर विचार करें।

numpy.zeros((3,3,3)) 

तुम भी वैज्ञानिक कंप्यूटिंग के लिए बनाया गया एक मॉड्यूल की सुविधा सुविधाओं का लाभ प्राप्त:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html#numpy.zeros

यह आपको शून्य के एक 3x3x3 सरणी दे देंगे।

+0

यह काम नहीं करता है। यह numpy.zeros होना चाहिए (0, 3, 3, 3)) –

+0

@Cytokine –

+0

सही किया गया है, मैं कसम खाता हूँ जब मैंने इसे टाइप किया था ...धन्यवाद जेडर! –

-3

बस घोंसला गुणा वाक्य रचना:

[[[0] * 3] * 3] * 3 

यह इस आपरेशन folds

def zeros(dimensions): 
    return reduce(lambda x, d: [x] * d, [0] + dimensions) 

या यदि आप संदर्भ प्रतिकृति से बचना चाहते हैं का उपयोग कर व्यक्त करने के लिए इसलिए आसान है, इसलिए फेरबदल एक आइटम किसी अन्य को प्रभावित नहीं करेगा, इसके बजाय आपको प्रतियों का उपयोग करना चाहिए:

import copy 
def zeros(dimensions): 
    item = 0 
    for dimension in dimensions: 
     item = map(copy.copy, [item] * dimension) 
    return item 
+1

मेरे संपादन –

+0

@Jader डायस का समय दें: आमीन – Dario

+0

अब मानचित्र का उपयोग !! –

1

NumPy इस समस्या

http://www.scipy.org/Tentative_NumPy_Tutorial#head-d3f8e5fe9b903f3c3b2a5c0dfceb60d71602cf93

>>> a = array([2,3,4]) 
>>> a 
array([2, 3, 4]) 
>>> type(a) 
<type 'numpy.ndarray'> 

संबोधित करते लेकिन अगर आप एक मैट्रिक्स के रूप में अजगर देशी सूचियों का उपयोग करना चाहते हैं तो निम्नलिखित सहायक तरीकों काम बन सकता है:

import copy 

def Create(dimensions, item): 
    for dimension in dimensions: 
     item = map(copy.copy, [item] * dimension) 
    return item 
def Get(matrix, position): 
    for index in position: 
     matrix = matrix[index] 
    return matrix 
def Set(matrix, position, value): 
    for index in position[:-1]: 
     matrix = matrix[index] 
    matrix[position[-1]] = value 
1

सूची की शुरुआत सूची प्रारंभ करने के लिए अभिव्यक्ति जोड़ने के लिए सिंटैक्टिक चीनी है; आपके मामले में, मैं उनका बिल्कुल उपयोग नहीं करता, और एक साधारण नेस्टेड लूप के लिए जाता हूं।

एक पूरी तरह से अलग स्तर पर: क्या आपको लगता है कि न्यूमपी के n-dimensional array बेहतर दृष्टिकोण हो सकता है?
हालांकि आप बहु-आयामी मैट्रिक्स को लागू करने के लिए सूचियों का उपयोग कर सकते हैं, मुझे लगता है कि वे उस लक्ष्य के लिए सबसे अच्छा उपकरण नहीं हैं।

0

या घोंसला समारोह परिभाषित here, itertools मॉड्यूल से दोहराने (0) के साथ संयुक्त का उपयोग करें:

nest(itertools.repeat(0),[3,3,3]) 
संबंधित मुद्दे