Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Γέμισμα λίστας, και μετά sort()

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3140

  • einsteinj
  • Το Άβαταρ του/της einsteinj
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 18
Παιδιά καλησπέρα σας,

γράφω έναν κώδικα ο οποίος, αφού εισάγουμε το όνομα του αρχείου μας, χωρίζουμε τις λέξεις στο αρχείο μας (το κάνω με την εντολή split() ), και μετά ελέγχουμε αν η λέξη που έχουμε υπάρχει ήδη στη κενή λίστα. Αν όχι, την προσθέτω, διαφορετικά συνεχίζω. Τέλος, θέλουμε η "νέα" λίστα, που δεν περιέχει τις ίδιες λέξεις (δεν έχουμε δηλαδή διπλότυπα), να γίνει ταξινόμηση αλφαβητικά.
Ο δικός μου κώδικας είναι:

fname=raw_input('Enter the file name: ')# The user enter the file name.
fhand=open(fname) # Open the file.
lst=list() # Create a new list.
i=0 # Counter.
for line in fhand: # A for loop.
line=line.rstrip() # No whitespaces.
words=line.split() # For each line, we split the words.
if words != words[i+1] in line: # Check if there is the same word.
lst.append(words) # We add the word, to the list.
print lst # Print the list.


Μήπως μπορεί κάποιος να με βοηθήσει, που έχω κάνει λάθος? Το αποτέλεσμα που μου επιστρέφει, μου θυμίζει σαν να κάνει διαγωνοποίηση έναν πίνακα...δηλαδή δεν επιστρέφει όλες τις λέξεις και φυσικά ούτε κατά αλφαβητική σειρά... :S :(
Κάθε βοήθεια και υπόδειξη είναι πολύτιμη στα αρχικά μου βήματα με την Python!
Ευχαριστώ πολύ!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3141

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
Υπάρχουν διάφορα προβλήματα στον κώδικα σου.
Επίσης θα ήταν καλό να τον έγραφες με σωστή στοίχιση.
Όταν γράφεις το μήνυμα σου, ένα από τα εικονίδια (αυτό με τα <>) κάνει εισαγωγή κώδικα.

Λοιπόν,
Ένας βολικός τρόπος να έχεις μοναδικά στοιχεία είναι το set.
Επίσης είναι σωστότερο να ανοίγεις αρχεία με το with open (ή το with codecs.open και encoding='utf-8' αν ασχολήσε με ελληνικά στην python 2.7)

Ένας κώδικας που μάλλον κάνει αυτό που θες είναι αυτός:
fname = raw_input('Enter the file name: ')  # The user enter the file name.
lst = set()  # Create a new set (collection of unique elements).
with open(fname, 'r') as fhand:  # Open the file.
    for line in fhand:  # A for loop.
        line = line.rstrip()  # No whitespaces.
        words = line.split()  # For each line, we split the words.
        for word in words:
            lst.add(word)  # add words to the set
print sorted(lst)  # Print the set (as sorted list).
Τελευταία διόρθωση: 9 Χρόνια 1 Μήνας πριν από embryo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": einsteinj

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3148

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Αυτά που λέει o/η embryo είναι σωστά.

Παρεμπιπτόντως, η ακόλουθη γραμμή του αρχικού σου κώδικα δεν κάνει σίγουρα αυτο που γράφεις στο comment ;)
if words != words[i+1] in line: # Check if there is the same word.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": einsteinj

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3155

  • einsteinj
  • Το Άβαταρ του/της einsteinj
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 18
Φίλε embryo ευχαριστώ πολύ για το μήνυμά σου! Κάθε αρχή και δύσκολη :laugh:
Θα προσπαθήσω να τον γράφω τον κώδικα με την σωστή στοίχιση, από εδώ και στο εξής για να διαβάζεται πιο εύκολα και ευχαριστώ για την επισήμανσή σου!
Πράγματι ο κώδικας που μου πρότεινες δουλεύει μια χαρά, αλλά υποτίθεται ότι εγώ δεν μου το έχουν μάθει ακόμη αυτό με το with...και το add....αλλά θα πρέπει να ακολουθήσω τον τρόπο του append() αντί του add(). Έχοντας και τον δικό σου κώδικα προσπάθησα να γράψω τον παρακάτω αλλά μου επιστρέφει None.. :blush:
Επίσης, προσπάθησα να εισάγω μέσα στο if και το elif αλλά εκεί να δεις προβλήματα... :evil:
Ο σκοπός που το έκανα αυτό ήταν ότι, σε περίπτωση που στο κείμενο "βρει" ίδια λέξη, να συνεχίζει ο κώδικας, ενώ αν είναι διαφορετική να την προσθέσει.
Ευχαριστώ πάρα πολύ για άλλη μία φορά για την υπομονή σου! :)
Υ.Γ. Πάτησα εισαγωγή κώδικά απο το μενού Boardcode για να παραθέσω τον δικό μου κώδικα, ώστε να είναι ευανάγνωστος. :)
ΚΩΔΙΚΑΣ ΧΩΡΙΣ elif
fname = raw_input('Enter the file name: ')  # The user enter the file name.
lst = list()  # Create a new set (collection of unique elements).
fhand=open(fname)# Open the file.
for line in fhand:
    line=line.rstrip()
    words=line.split()
    for word in words:
        if word != word in words: # If it is not the same word.
            lst.append(word)      # Then Add it to the list.
print lst.sort()

ΚΩΔΙΚΑΣ ΜΕ elif
 
fname = raw_input('Enter the file name: ')  # The user enter the file name.
lst = list()  # Create a new set (collection of unique elements).
fhand=open(fname)# Open the file.
for line in fhand:
    line=line.rstrip()
    words=line.split()
    for word in words:
        if word != word in words:
            lst.append(word)
        elif  continue:
print lst.sort()
 
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3156

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Το if που χρησιμοποιείς είναι και πάλι λάθος. Αυτό που θες να κάνεις είναι:

Αν η λέξη word δεν είναι στη λίστα lst τότε προσέθεσε τη λέξη word στη λίστα lst.

Πως μπορείς να το γράψεις αυτό σε Python?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": einsteinj

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3157

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Το None που σου επιστρέφει είναι γιατί κάνεις
print lst.sort()

Η μέθοδος sort() δουλεύει inplace και επιστρέφει None. H function sorted() επιστρέφει ένα καινούριο αντικέιμενο:
lst = [3, 2, 1]
lst.sort()
print(lst.sort())   # None
 
 
lst = [3, 2, 1]
lst.sort()
print(lst)          # [1, 2, 3]
 
 
lst = [3, 2, 1]
sorted(lst)
print(lst)          # [3, 2, 1]
 
lst = [3, 2, 1]
lst = sorted(lst)
print(lst)          # [1, 2, 3]
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": einsteinj

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3158

  • einsteinj
  • Το Άβαταρ του/της einsteinj
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 18
Φίλε pmav09 ευχαριστώ για την παρατήρησή σου!
Ναι έχεις δίκιο, ξέχασα να γράψω και το i αρχικά στη λέξη word δηλαδή
if word[i] != word[i+1] in line: # Check if there is the same word.

Το σκεπτικό μου ήταν, ότι ο μετρητής i, να ελέγχει την λέξη π.χ. 1 με την λέξη i+1=2, την δέυτερη-επόμενη λέξη. Αλλά μετά κατάλαβα ότι ήταν λάθος, γιατί η επαναλαμβανόμενη λέξη μπορεί να μην είναι η επόμενη στη σειρά που ακολουθεί μέσα στο αρχείο μου αλλά κάποια προς το τέλος, οπότε σε περίπτωση που έτρεχε...λέω εγώ τώρα... :) θα μου είχε πάλι μέσα λέξεις επαναλαμβανόμενες, που εγώ δεν το ήθελα.
Αλλά το κατάλαβα αργότερα... :( Κάλιο αργά παρά ποτέ... :laugh:
Ευχαριστώ πάντως για την επισήμανσή σου!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3159

  • einsteinj
  • Το Άβαταρ του/της einsteinj
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 18
Με την εντολή split(), χώρισα το κείμενο σε λέξεις και για αυτό έγραψα το
if word != word in words:


και καλά, αν η λέξη word που "τραβάει" το πρόγραμμα, είναι ίδια με την προηγούμενη επανάληψη, τότε να την προσθέσει.
Αλλά μάλλον θα πρέπει να το γράψω:
if word != word in lst:

Οπότε αν είναι στη λίστα να μην την ξανά προσθέσει, διαφορετικά το αντίθετο.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3160

  • einsteinj
  • Το Άβαταρ του/της einsteinj
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 18
Τώρα το κατάλαβα την διαφορά! Σε ευχαριστώ θερμά!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3161

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
einsteinj έγραψε:
Αλλά μάλλον θα πρέπει να το γράψω:
if word != word in lst:

Οπότε αν είναι στη λίστα να μην την ξανά προσθέσει, διαφορετικά το αντίθετο.
Μάλλον ούτε αυτό θα σου δουλέψει.
Η σύνταξη του if δεν είναι πολύ σωστή.
Μήπος εννοείς:
if word != word and word not in lst:

Αν και το word θα είναι πάντα == με το word...

Μάλλον αυτό που θες είναι το:
if word not in lst:
Τελευταία διόρθωση: 9 Χρόνια 1 Μήνας πριν από embryo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": einsteinj

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3163

  • einsteinj
  • Το Άβαταρ του/της einsteinj
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 18
Σ'ευχαριστώ πάρα μα πάρα πολύ!!!! Τελικά μου έτρεξε και πήρα το επιθυμητό αποτέλεσμα!!!! :laugh: ;)
Τελικά το if το αντικατέστησα με αυτό που μου είπες και όλα πήγα μια χαρά!
Έχεις μήπως να μου προτείνεις εσύ ή και κάποιος άλλος, κάνα καλό βιβλίο?
Εγώ έχω για αρχή το Python Cookbook και το Python Text Processing.
Και πάλι ευχαριστώ και εσένα αλλά και όλους όσοι αφιερώσατε χρόνο για το πρόβλημά μου! :)
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3164

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 92
  • Ληφθείσες Ευχαριστίες 31
einsteinj έγραψε:
Έχεις μήπως να μου προτείνεις εσύ ή και κάποιος άλλος, κάνα καλό βιβλίο?
Εγώ έχω για αρχή το Python Cookbook και το Python Text Processing.

Γενικώς οι εκδόσεις O'Reilly είναι αρκετά καλές.
Για αρχή δοκίμασε το "Learning Python" και "Python in a Nutshell" και αργότερα το "Programming Python".

Τσέκαρε το edition του βιβλίου να υποστηρίζει το version της Python που χρησιμοποιείς.
π.χ. το Learning Python 3rd Ed. υποστηρίζει [2.x - 3.x], αλλά το Programming Python 4th Ed. υποστηρίζει μόνο [3.x]. Το 3rd Ed. υποστηρίζει [2.x]
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": einsteinj

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3166

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Αν είσαι τελείως αρχάριος, δεν θα σου πρότεινα το Learning Python. Παρά είναι λεπτομερές για κάποιον που δεν έχει πρότερη εμπειρία. Προσωπικά προτείνω τα βιβλία που αναφέρονται εδώ: el.wikibooks.org/wiki/%CE%A0%CF%89%CF%82...4%CE%B7%CE%BD_python
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": einsteinj

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3201

  • einsteinj
  • Το Άβαταρ του/της einsteinj
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 18
Σ'ευχαριστώ πολύ για τις συμβουλές σου! Θα τα δω τα βιβλία στη βιβλιοθήκη.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Γέμισμα λίστας, και μετά sort() 9 Χρόνια 1 Μήνας πριν #3202

  • einsteinj
  • Το Άβαταρ του/της einsteinj
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 18
Ευχαριστώ πολύ!! Ενδιαφέρον υλικό!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.314 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου