Τα παρακάτω περιεχόμενα, μαζί με παράδειγμα κώδικα, εξηγούν τον τρόπο μετατροπής λιστών (πινάκων) συμβολοσειρών (str) και λιστών αριθμών (int, float) μεταξύ τους στην Python.
- Μετατροπή μιας λίστας αριθμών σε μια λίστα συμβολοσειρών
- Μετατροπή ενός αριθμού σε δεκαδική συμβολοσειρά
- Μετατρέπει αριθμητικές τιμές σε δυαδικές, οκταδικές και δεκαεξαδικές συμβολοσειρές
- Μετατρέπει μια αριθμητική τιμή σε συμβολοσειρά σε εκθετικό συμβολισμό
- Μετατροπή μιας λίστας συμβολοσειρών σε μια λίστα αριθμών
- Μετατροπή δεκαδικής συμβολοσειράς σε αριθμητική
- Μετατρέπει δυαδικές, οκταδικές και δεκαεξαδικές συμβολοσειρές σε αριθμούς
- Μετατρέπει συμβολοσειρές σε εκθετικό συμβολισμό σε αριθμητικές τιμές
- Μετατρέψτε μόνο συμβολοσειρές που μπορούν να μετατραπούν σε αριθμούς
Κατά τη δημιουργία μιας νέας λίστας από μια λίστα, η κατανόηση λίστας είναι απλούστερη στη σύνταξη από ό,τι οι βρόχοι for. Ο κώδικας του παραδείγματος σε αυτό το άρθρο χρησιμοποιεί επίσης περιλήψεις λίστας. Για λεπτομέρειες σχετικά με την κατανόηση λίστας, ανατρέξτε στο ακόλουθο άρθρο.
Σημειώστε ότι οι λίστες μπορούν να αποθηκεύουν διαφορετικούς τύπους δεδομένων και διαφέρουν αυστηρά από τους πίνακες. Χρησιμοποιήστε array (τυπική βιβλιοθήκη) ή NumPy στις ακόλουθες περιπτώσεις.
- Θέλω να χειρίζομαι διεργασίες που απαιτούν μέγεθος μνήμης και διευθύνσεις μνήμης.
- Θέλετε να χειρίζεστε πίνακες για αριθμητική επεξεργασία μεγάλων συνόλων δεδομένων κ.λπ.
Μετατροπή μιας λίστας αριθμών σε μια λίστα συμβολοσειρών
Μετατροπή ενός αριθμού σε δεκαδική συμβολοσειρά
Χρησιμοποιήστε την str() για τη μετατροπή από αριθμητικό σε αλφαριθμητικό.
Στην Python, οι αριθμοί μπορούν να εκφραστούν σε διάφορες μορφές, όπως εκθετική, δεκαεξαδική και δυαδική (δεκαεξαδική και δυαδική σημειογραφία). Η μετατροπή str() έχει ως αποτέλεσμα μια συμβολοσειρά σε κανονική δεκαδική σημειογραφία.
Ανάλογα με τον αριθμό των ψηφίων, ο εκθετικός συμβολισμός μπορεί να χρησιμοποιηθεί αυτόματα.
l_n = [-0.5, 0, 1.0, 100, 1.2e-2, 0xff, 0b11]
l_n_str = [str(n) for n in l_n]
print(l_n_str)
# ['-0.5', '0', '1.0', '100', '0.012', '255', '3']
Μετατρέπει αριθμητικές τιμές σε δυαδικές, οκταδικές και δεκαεξαδικές συμβολοσειρές
Για τη μετατροπή σε δυαδική, οκταδική ή δεκαεξαδική συμβολοσειρά (δυαδική συμβολοσειρά, οκταδική συμβολοσειρά ή δεκαεξαδική συμβολοσειρά) είναι διαθέσιμες οι ακόλουθες μέθοδοι.
bin()
oct()
hex()
format()
str.format()
Με τη συνάρτηση format(), μπορείτε να συμπληρώσετε τα μηδενικά και να προσαρμόσετε τα ψηφία.
l_i = [0, 64, 128, 192, 256]
l_i_hex1 = [hex(i) for i in l_i]
print(l_i_hex1)
# ['0x0', '0x40', '0x80', '0xc0', '0x100']
l_i_hex2 = [format(i, '04x') for i in l_i]
print(l_i_hex2)
# ['0000', '0040', '0080', '00c0', '0100']
l_i_hex3 = [format(i, '#06x') for i in l_i]
print(l_i_hex3)
# ['0x0000', '0x0040', '0x0080', '0x00c0', '0x0100']
Μετατρέπει μια αριθμητική τιμή σε συμβολοσειρά σε εκθετικό συμβολισμό
Όπως αναφέρθηκε παραπάνω, ορισμένες περιπτώσεις μπορεί να είναι αυτόματα σε εκθετική σημειογραφία ανάλογα με τον αριθμό των ψηφίων. Ωστόσο, για να μετατρέπετε πάντα μια συμβολοσειρά σε εκθετική σημειογραφία, χρησιμοποιήστε μία από τις ακόλουθες επιλογές
format()
str.format()
Για περισσότερες πληροφορίες σχετικά με τη συνάρτηση format() και τη μέθοδο συμβολοσειρών str.format(), ανατρέξτε στο ακόλουθο άρθρο.
- ΣΧΕΤΙΚΑ:Μετατροπή μορφής στην Python, μορφή (συμπλήρωση 0, εκθετική σημειογραφία, δεκαεξαδικό σύστημα κ.λπ.)
Μπορεί να καθοριστεί ο αριθμός των ψηφίων του τμήματος mantissa. Εάν χρησιμοποιείται ένα κεφαλαίο E ως όρισμα, η συμβολοσειρά εξόδου είναι επίσης ένα κεφαλαίο E.
l_f = [0.0001, 123.456, 123400000]
l_f_e1 = [format(f, 'e') for f in l_f]
print(l_f_e1)
# ['1.000000e-04', '1.234560e+02', '1.234000e+08']
l_f_e2 = [format(f, '.3E') for f in l_f]
print(l_f_e2)
# ['1.000E-04', '1.235E+02', '1.234E+08']
Μετατροπή μιας λίστας συμβολοσειρών σε μια λίστα αριθμών
Μετατροπή δεκαδικής συμβολοσειράς σε αριθμητική
Χρησιμοποιήστε την int() ή την float() για να μετατρέψετε μια συμβολοσειρά σε αριθμό.
Η int() είναι μια μετατροπή σε ακέραιο αριθμό και η float() είναι μια μετατροπή σε αριθμό κινητής υποδιαστολής.
Στην float(), οι συμβολοσειρές που παραλείπουν το ακέραιο μέρος συμπληρώνονται με 0 για το ακέραιο μέρος.
l_si = ['-10', '0', '100']
l_si_i = [int(s) for s in l_si]
print(l_si_i)
# [-10, 0, 100]
l_sf = ['.123', '1.23', '123']
l_sf_f = [float(s) for s in l_sf]
print(l_sf_f)
# [0.123, 1.23, 123.0]
Μετατρέπει δυαδικές, οκταδικές και δεκαεξαδικές συμβολοσειρές σε αριθμούς
Το δεύτερο όρισμα της int() μπορεί να είναι ένα radix: 2 για δυαδικό, 8 για οκταδικό και 16 για δεκαεξαδικό, μετατρέποντας μια συμβολοσειρά σε αριθμό.
Εάν καθοριστεί 0, κάθε μία από τις ακόλουθες συμβολοσειρές με πρόθεμα μετατρέπεται σε ακέραιο αριθμό.
0b
- δυαδικά ψηφία
0o
- octal
0x
- δεκαεξαδικό
- ΣΧΕΤΙΚΑ:Μετατροπή δυαδικών, οκταδικών και δεκαεξαδικών αριθμών και συμβολοσειρών μεταξύ τους στην Python
l_sb = ['0011', '0101', '1111']
l_sb_i = [int(s, 2) for s in l_sb]
print(l_sb_i)
# [3, 5, 15]
l_sbox = ['100', '0b100', '0o77', '0xff']
l_sbox_i = [int(s, 0) for s in l_sbox]
print(l_sbox_i)
# [100, 4, 63, 255]
Μετατρέπει συμβολοσειρές σε εκθετικό συμβολισμό σε αριθμητικές τιμές
Οι συμβολοσειρές σε εκθετικό συμβολισμό μπορούν να μετατραπούν απευθείας με την float() χωρίς την ανάγκη ειδικών προδιαγραφών.
l_se = ['1.23e3', '0.123e-1', '123']
l_se_f = [float(s) for s in l_se]
print(l_se_f)
# [1230.0, 0.0123, 123.0]
Μετατρέψτε μόνο συμβολοσειρές που μπορούν να μετατραπούν σε αριθμούς
Η διαβίβαση μιας συμβολοσειράς που δεν μπορεί να μετατραπεί σε αριθμό στην int() ή float() θα οδηγήσει σε ValueError.
Εάν οριστεί μια νέα συνάρτηση που επιστρέφει false σε σφάλμα, μόνο τα στοιχεία που μπορούν να μετατραπούν μπορούν να μετατραπούν σε αριθμούς και να γίνουν στοιχεία της λίστας.
def is_int(s):
try:
int(s)
except ValueError:
return False
else:
return True
def is_float(s):
try:
float(s)
except ValueError:
return False
else:
return True
l_multi = ['-100', '100', '1.23', '1.23e2', 'one']
l_multi_i = [int(s) for s in l_multi if is_int(s)]
print(l_multi_i)
# [-100, 100]
l_multi_f = [float(s) for s in l_multi if is_float(s)]
print(l_multi_f)
# [-100.0, 100.0, 1.23, 123.0]