2016-04-11 8 views
-1

kullanırken bir Int'i Listede tanıyor Python'da bir radix sorti oluşturmaya çalışıyorum. Bir TypeError hat c% = bölen piton üzerinde MaalesefPython, =%

i = 0 
numbers = "random_numbers10.txt" 
numbersAsString = open(numbers) 
numbersList = [int(i) for i in numbersAsString] 

thisList = numbersList 
bins = [[], [], [], [], [], [], [], [], [], []] 
divisor = 10 


for y in range(0,10): 
    for x in range(0, len(thisList)): 
     c = numbersList[x] 
     c %= divisor 
     thisList[x] = c 
    for n in range(0, len(thisList)): 
     if thisList[n] == n: 
      bins[n].append(numbersList) 
    for m in range(0, 10): 
     for o in range(0, len(bins[m])): 
      numbersList.append(bins[m]) 




for i in numbersList: 
    print(numbersList[i]) 

atar: desteklenmeyen işlenen türü (ler)% = için: 'listesinde' ve 'int'

Ben eğer Şimdiye kadar bu benim kodudur c veya numbersList [x] yazdırmak, numara listemden beklenen sayı olarak çıkar. Listenin üyesi olan bir tamsayı listenin kendisi olarak kabul edilmesinin bir sebebi var mı? Ya da dördüncü kod hattımla ilgili bir sorun olabilir mi? Şimdiden çok teşekkür ederim.

+0

Kendinizi Python - 'bins = [[], [], [], [], [], [], [], [], [], []] 'da yaptığınızı bulamazsınız '. Sadece 1'den fazla hata ve diğer kötü, hata ayıklama sorunları için sorun. Bu C değil. Hiçbir şey başlatmak zorunda değilsiniz. –

cevap

1
for m in range(0, 10): 
    for o in range(0, len(bins[m])): 
     numbersList.append(bins[m]) 

Bu bana doğru görünmüyor. o ile yineleyin, ancak asla kullanmayın. As-is, tamsayılar yerine numbersList listelerini ekliyorsunuz.

thislist = numbersList 

Bu hat: Sen numaralar listesinin sığ bir kopyasını yaptık

for m in range(0, 10): 
    numbersList.extend(bins[m]) 
+0

Daha da fazlasını "kutulara bin için: numberList.extend (bin)" için basitleştirebilirsiniz. Kodda da bir grup mantık hatası var, ancak bu 'TypeError' ı çözüyor. – Blckknght

0

: İlja anlaşılacağı gibi, sen kadar kısaltın olabilir,

for m in range(0, 10): 
    for o in range(0, len(bins[m])): 
     numbersList.append(bins[m][o]) 

Veya: aradınız bu listenin punto sayılarınaList anlamına gelir, ayrı bir varlık veya kopya değildir.

Kodunuz m aralığına ulaştığında, öğeleri ekleyerek numbersList öğesini değiştirirsiniz. Bu da bu listeyi değiştiriyor.

thislist = numbersList[:] 

bu değeri hatasını belirlemiştir değiştirilmesi ama şimdi numbersList ucundaki boş depo bir yük göreceksiniz. Örneğinizin sonunda for döngüsünü kullanarak yazdırmaz.

Sıralama algoritmasının, en azından benim örneğimde çalışıyor gibi görünmediğini unutmayın. Bir sorun çözüldü ve diğeri bulundu!

+0

Burada * Sayı listesinin sığ bir kopyasını yaptınız * ile bağlayınız * ayrı bir varlık ya da kopya değildir *? –