Συνδέοντας και ενώνοντας συμβολοσειρές στην Python: + κ.λπ.

Επιχείρηση

Ακολουθεί μια περιγραφή του τρόπου συνένωσης και σύνδεσης συμβολοσειρών str στην Python.

  • Συνένωση και συγχώνευση πολλαπλών συμβολοσειρών: +,+=χειριστής
  • Συνδέστε και συνδυάστε αριθμούς και συμβολοσειρές: +,+=χειριστής,str(),format(),f-string
  • Συνδέστε και συνδυάστε λίστες (πίνακες) συμβολοσειρών σε μια ενιαία συμβολοσειρά:join()
  • Συνδέστε και συνδυάστε λίστες (πίνακες) αριθμών σε ένα ενιαίο αλφαριθμητικό:join(),str()

Συνένωση και συγχώνευση πολλαπλών συμβολοσειρών: +, +=χειριστής

σύνδεση: +χειριστής

Ο τελεστής ++ μπορεί να χρησιμοποιηθεί για τη συνένωση των ακόλουθων γραμματικών συμβολοσειρών και μεταβλητών συμβολοσειρών

  • '…'
  • «…»
s = 'aaa' + 'bbb' + 'ccc'
print(s)
# aaabbbccc

s1 = 'aaa'
s2 = 'bbb'
s3 = 'ccc'

s = s1 + s2 + s3
print(s)
# aaabbbccc

s = s1 + s2 + s3 + 'ddd'
print(s)
# aaabbbcccddd

σύνδεση: +=χειριστής

Μπορεί επίσης να χρησιμοποιηθεί ο τελεστής +=, ένας αθροιστικός τελεστής ανάθεσης. Η μεταβλητή συμβολοσειράς στην αριστερή πλευρά συνδέεται με τη συμβολοσειρά στη δεξιά πλευρά, ανατίθεται και ενημερώνεται.

s1 += s2
print(s1)
# aaabbb

Αν θέλετε να προσθέσετε μια συμβολοσειρά στο τέλος μιας μεταβλητής συμβολοσειράς, απλά επεξεργαστείτε τη μεταβλητή συμβολοσειράς και οποιοδήποτε λεκτικό συμβολοσειράς (ή μια άλλη μεταβλητή συμβολοσειράς) με τον τελεστή +=.

s = 'aaa'

s += 'xxx'
print(s)
# aaaxxx

Διαδοχική συνένωση γραμματικών αλφαριθμητικών

Αν απλά γράψετε αλφαριθμητικά δίπλα-δίπλα, τα αλφαριθμητικά θα συνδεθούν μεταξύ τους.

s = 'aaa''bbb''ccc'
print(s)
# aaabbbccc

Είναι αποδεκτό να υπάρχει κενό μεταξύ δύο γραμμών ή διακοπή γραμμής με backslash (θεωρείται συνέχεια).

s = 'aaa'  'bbb'    'ccc'
print(s)
# aaabbbccc

s = 'aaa'\
    'bbb'\
    'ccc'
print(s)
# aaabbbccc

Υπάρχει μια τεχνική που μπορεί να χρησιμοποιηθεί για να γράψετε μεγάλες συμβολοσειρές σε πολλές γραμμές στον κώδικα.

Αυτή η μέθοδος εγγραφής δεν είναι δυνατή για μεταβλητές συμβολοσειράς.

# s = s1 s2 s3
# SyntaxError: invalid syntax

Συνένωση αριθμών και συμβολοσειρών\concatenation: +,+=χειριστής,str(),format(),f-string

Μια λειτουργία + διαφορετικού τύπου οδηγεί σε σφάλμα.

s1 = 'aaa'
s2 = 'bbb'

i = 100
f = 0.25

# s = s1 + i
# TypeError: must be str, not int

Αν θέλετε να συνδέσετε μια αριθμητική τιμή (π.χ. ακέραιο τύπο int ή τύπο κινητής υποδιαστολής float) με μια συμβολοσειρά, μετατρέψτε την αριθμητική τιμή σε τύπο συμβολοσειράς με τη συνάρτηση str() και, στη συνέχεια, συνδέστε τις με τον τελεστή + (ή τον τελεστή +=).

s = s1 + '_' + str(i) + '_' + s2 + '_' + str(f)
print(s)
# aaa_100_bbb_0.25

Αν θέλετε να μετατρέψετε τη μορφή ενός αριθμού, όπως η συμπλήρωση μηδενικών ή δεκαδικών θέσεων, χρησιμοποιήστε τη συνάρτηση format() ή τη μέθοδο συμβολοσειράς format().

s = s1 + '_' + format(i, '05') + '_' + s2 + '_' + format(f, '.5f')
print(s)
# aaa_00100_bbb_0.25000

s = '{}_{:05}_{}_{:.5f}'.format(s1, i, s2, f)
print(s)
# aaa_00100_bbb_0.25000

Φυσικά, είναι επίσης δυνατό να ενσωματώσετε την τιμή μιας μεταβλητής απευθείας σε μια συμβολοσειρά χωρίς μορφοποίηση. Αυτό είναι απλούστερο στη συγγραφή από τη χρήση του τελεστή +.

s = '{}_{}_{}_{}'.format(s1, i, s2, f)
print(s)
# aaa_100_bbb_0.25

Ανατρέξτε στο ακόλουθο άρθρο για λεπτομέρειες σχετικά με τον τρόπο καθορισμού της μορφής.

Από την Python 3.6, έχει επίσης εισαχθεί ένας μηχανισμός που ονομάζεται f-strings (f-string), ο οποίος είναι ακόμη πιο απλός στη σύνταξη από τη format().

s = f'{s1}_{i:05}_{s2}_{f:.5f}'
print(s)
# aaa_00100_bbb_0.25000

s = f'{s1}_{i}_{s2}_{f}'
print(s)
# aaa_100_bbb_0.25

Συνδέστε και ενώστε λίστες (πίνακες) συμβολοσειρών: join()

Η μέθοδος join() μπορεί να χρησιμοποιηθεί για τη συνένωση μιας λίστας συμβολοσειρών σε μια ενιαία συμβολοσειρά.

Ο τρόπος γραφής είναι ο εξής.

'String to be inserted between'.join([List of strings to be concatenated])

Καλέστε τη μέθοδο join() με 'συμβολοσειρά προς εισαγωγή μεταξύ' και παραδώστε [λίστα συμβολοσειρών προς συνένωση] ως όρισμα.

Αν χρησιμοποιηθεί μια κενή συμβολοσειρά, η [λίστα των συμβολοσειρών προς σύνδεση] θα συνδεθεί απλά, αν χρησιμοποιηθεί ένα κόμμα, οι συμβολοσειρές θα διαχωριστούν με κόμμα, και αν χρησιμοποιηθεί ένας χαρακτήρας νέας γραμμής, κάθε στοιχείο συμβολοσειράς θα διαχωριστεί με νέα γραμμή.

l = ['aaa', 'bbb', 'ccc']

s = ''.join(l)
print(s)
# aaabbbccc

s = ','.join(l)
print(s)
# aaa,bbb,ccc

s = '-'.join(l)
print(s)
# aaa-bbb-ccc

s = '\n'.join(l)
print(s)
# aaa
# bbb
# ccc

Παρόλο που εδώ δίνεται μόνο ένα παράδειγμα λίστας, άλλα επαναλήψιμα αντικείμενα, όπως πλειάδες, μπορούν επίσης να καθοριστούν ως ορίσματα στην join().

Σε αντίθεση με την join(), η split() χρησιμοποιείται για να χωρίσει ένα αλφαριθμητικό που οριοθετείται από ένα συγκεκριμένο διαχωριστικό και να το λάβει ως λίστα.

Συνδέστε και συνδυάστε λίστες (πίνακες) αριθμών ως συμβολοσειρές: join(),str()

Εμφανίζεται σφάλμα εάν το όρισμα της join() είναι μια λίστα της οποίας τα στοιχεία δεν είναι συμβολοσειρές.

l = [0, 1, 2]

# s = '-'.join(l)
# TypeError: sequence item 0: expected str instance, int found

Για να συνδέσετε μια λίστα αριθμών σε ένα ενιαίο αλφαριθμητικό, εφαρμόστε τη συνάρτηση str() σε κάθε στοιχείο του συμβολισμού κατανόησης της λίστας για να μετατρέψετε τους αριθμούς σε αλφαριθμητικό και, στη συνέχεια, ενώστε τους με τη συνάρτηση join().

s = '-'.join([str(n) for n in l])
print(s)
# 0-1-2

Μπορεί επίσης να γραφτεί ως έκφραση γεννήτριας, η οποία είναι μια εκδοχή γεννήτριας της κατανόησης λίστας. Οι εκφράσεις γεννήτριας περικλείονται σε παρενθέσεις, αλλά οι παρενθέσεις μπορούν να παραλειφθούν εάν η έκφραση γεννήτριας είναι το μοναδικό όρισμα σε μια συνάρτηση ή μέθοδο.

s = '-'.join((str(n) for n in l))
print(s)
# 0-1-2

s = '-'.join(str(n) for n in l)
print(s)
# 0-1-2

Οι εκφράσεις γεννητριών έχουν γενικά το πλεονέκτημα ότι χρησιμοποιούν λιγότερη μνήμη από τις κατανοήσεις λίστας, αλλά δεν υπάρχει ιδιαίτερο πλεονέκτημα στη χρήση εκφράσεων γεννητριών, δεδομένου ότι η join() μετατρέπει τις γεννήτριες σε λίστες κατά την εσωτερική της επεξεργασία. Στην πραγματικότητα, είναι ελαφρώς ταχύτερη η χρήση των περιλήψεων λίστας από την αρχή.

Για περισσότερες πληροφορίες σχετικά με την κατανόηση λίστας και τις εκφράσεις γεννήτριας, ανατρέξτε στο ακόλουθο άρθρο.