2016-04-04 12 views
1

Python'da Radix Sort için bir program yazdım. Ancak kodu çalıştırdığımda, max() arg is an empty sequence hata iletisini takip ediyorum. Ben dizideki değerleri girmeden önce bu hatayı alıyorummax() arg boş bir dizilimdir

class RadixSort: 
    num=0 
    array=[] 

    def getData(self): 
     print 'Enter the number of elements you want to enter: ' 
     num=int(input()) 
     print 'Now enter the elements: ' 
     for i in range(0,self.num): 
      print 'Element ',i+1,': ' 
      value=int(input()) 
      self.array.append(value) 

    def radixSort(self): 
     bin=[[],[],[],[],[],[],[],[],[],[]] 
     r=1 
     m=max(self.array) 
     while m>r: 
      for ele in self.array: 
       bin[(ele/r)%10].append(ele) 
      r=r*10 
      self.array=[] 
      for i in range(10): 
       self.array.extend(bin[i]) 
       bin[i]=[]  

    def displayArray(self): 
     print '' 
     for ele in self.array: 
      print ele 


RObject=RadixSort() 
RObject.getData() 
RObject.radixSort() 
RObject.displayArray() 

: İşte benim kodudur. Bunu Nasıl Çözebilirim?

+0

Bir yan not: radixSort() öğesinde 'self.array 'öğesine erişmeniz size bir' Attribute'Error 'vermelidir - dizge = []' yi 'self.array' haline getirmeniz gerekir. = [] ' – nlsdfnbch

+1

@ j4ck:' array = [] 'geçerli, ancak' array', bir öznitelik değil, bir sınıf niteliği olacaktır. – Matthias

cevap

2

Ben değiştirmek gerektiğini düşünüyorum:

num = int(input()) 

için
self.num = int(input()) 

dizisi boş olmadığını kontrol etmek olacaktır gereksiz değil: tam göstermelidir

m = max(self.array) if self.array else 0 
+0

Veya, daha fazla EAFP iseniz: boş dizileri işlemek için 'try' ve' except' kullanın. [Girişinizin niteliğine bağlı olarak] küçük bir performans artışı sağlayabilir (http://stackoverflow.com/questions/1835756/using-try-vs-if-in-python); Kısacası, düzenli aralıklarla boş dizileriniz olduğundan korkuyorsanız, 'if' kullanın; başka 'try' kullanın. – nlsdfnbch

0

geri iz. Ben senin kod çalıştırmasına zaman bu olsun:

Enter the number of elements you want to enter: 
3 
Now enter the elements: 
Traceback (most recent call last): 
    File "radix.py", line 35, in <module> 
    RObject.radixSort() 
    File "radix.py", line 17, in radixSort 
    m=max(self.array) 
ValueError: max() arg is an empty sequence 

var olmayan bir nesne üzerinde maksimum işlev yapamaz çünkü böylece m = max (self.array) başarısız olur. Self.array oluşturmak için init yöntemine sahip olmanız gerekir

Neden giriş kullanıyorsunuz ve raw_input değil? Python 2.7

+0

Evet, python 2.xx'im var – Prashant