2013-10-27 2 views
0

Прежде всего, я исхожу из фона в C/C++/Java. Я решил изучить Python, чтобы расширить свои навыки и, надеюсь, углубиться в некоторые веб-разработки. Я изучал его уже около двух дней, и я пытался создать несколько простых структур данных.Неполадка создания простого связанного списка Python

У меня так много ошибок, и я не могу понять, что делать! Я попытался его исследовать, и я все еще не могу понять. Я получаю ошибки в отношении количества позиционных аргументов, переданных моим членам-членам LinkedList, и когда я их вынимаю, он говорит, что self не определен в определениях функций узла.

class Node: 

    def __init__(): 
     self.data = None 
     self.nextNode = None 

    def set_and_return_Next(): 
     self.nextNode = Node() 
     return self.nextNode 

    def getNext(): 
     return self.nextNode 

    def getData(): 
     return self.data 

    def setData(d): 
     self.data = d 


class LinkedList: 

    def buildList(array): 
     head = Node() 
     head.setData(array[0]) 
     temp = head 
     for i in array: 
      temp = temp.set_and_return_Next() 
      temp.setData(array[i]) 
      tail = temp 
     return self.head 

    def printList(): 
     tempNode = head 
     while(tempNode!=tail): 
      print(tempNode.getData()) 
      tempNode = tempNode.getNext() 

myArray = [3, 5, 4, 6, 2, 6, 7, 8, 9, 10, 21] 

myList = LinkedList() 
myList.buildList(myArray) 
myList.printList() 

Я знаю, что это, вероятно, глупые ошибки, но, пожалуйста, помогите.

+4

как в сторону редко, чтобы иметь реальную потребность создать что-то вроде этого в питона ... если его просто Практика кодирования python - это хорошо, но если вы планируете повторно использовать это в программах, лучше использовать встроенные типы данных для использования –

+0

после того, как вы это сделали, вы должны изменить 'для i в массиве:' в определении 'buildlist' для' for i в диапазоне (len (массив)): '** Edit: ** Во-вторых, это также помогло бы, если бы вы сказали что-то более об этом простом примере, который у вас есть потому что существует так много ошибок (!), что трудно предложить что-либо (помимо очевидного синтаксического материала), не зная цели. – redrivercrayon

ответ

1

ОП писал:

Fixed его! Вот новый код:

#Matthew's Simple Python 
# Practice Linked List 
class Node: 

    def __init__(self): 
     self.data = None 
     self.nextNode = None 

    def set_and_return_Next(self): 
     self.nextNode = Node() 
     return self.nextNode 

    def getNext(self): 
     return self.nextNode 

    def getData(self): 
     return self.data 

    def setData(self, d): 
     self.data = d 

class LinkedList: 

    def buildList(self, array): 
     self.head = Node() 
     self.head.setData(array[0]) 
     self.temp = self.head 
     for i in array[1:]: 
      self.temp = self.temp.set_and_return_Next() 
      self.temp.setData(i) 
      self.tail = self.temp 
     return self.head 

    def printList(self): 
     tempNode = self.head 
     while(tempNode!=self.tail): 
      print(tempNode.getData()) 
      tempNode = tempNode.getNext() 
     print(self.tail.getData()) 

myArray = [3, 5, 4, 6, 2, 6, 7, 8, 9, 10, 21] 

myList = LinkedList() 
myList.buildList(myArray) 
myList.printList() 

Здесь выход:

>>> 
3 
5 
4 
6 
2 
6 
7 
8 
9 
10 
21 
+0

([Отвечено в вопросе редактирования и конвертировано в сообщество wiki] (http://meta.stackoverflow.com/questions/267434/what-is-the-appro-action-when-the-answer-to-a- -это-добавлен вопрос-к-дие).) –

5

В Python (в отличие от C++) каждый метод экземпляра имеет неявный первый аргумент: экземпляр класса. Это называется self, по соглашению:

def some_method(self, arg1, ...): 

Кроме того, в Python, можно использовать списки вместо массивов почти везде. То, что вы назвали myArray, на самом деле является списком. Перебор списков и других итерируемыми перебирает элементов, а не индексы:

for element in your_list: 
    do_something(element) 
+0

Спасибо! Я не понимал, что об итерациях, очевидно, это была огромная ошибка. Очень отличается от всего, что я видел раньше. Это также отличается от того, что в C++/Java ключевое слово ** этого ** не всегда требуется. Во всяком случае, я это исправил. –

Смежные вопросы