Наступнае змест разам з прыкладам кода тлумачыць, як пераўтварыць спісы (масіў) радкоў (str) і спісы лікаў (int, float) адзін у аднаго ў Python.
- Пераўтварыць спіс лікаў у спіс радкоў
- Пераўтварыць лік у дзесятковы радок
- Пераўтварае лікавыя значэнні ў двайковыя, васьмярковыя і шаснаццатковыя радкі
- Пераўтварае лікавае значэнне ў радок у экспанентным абазначэнні
- Пераўтварыць спіс радкоў у спіс лікаў
- Пераўтварэнне дзесятковага радка ў лік
- Пераўтварае двайковыя, васьмярковыя і шаснаццатковыя радкі ў лічбы
- Пераўтварае радкі ў экспанентным абазначэнні ў лікавыя значэнні
- Канвертаваць толькі радкі, якія можна пераўтварыць у лічбы
Пры стварэнні новага спісу са спісу разуменне спісу пісаць прасцей, чым для цыклаў. Узор кода ў гэтым артыкуле таксама выкарыстоўвае спіс разумення. Больш падрабязную інфармацыю аб разуменні спісу глядзіце ў наступным артыкуле.
Звярніце ўвагу, што спісы могуць захоўваць розныя тыпы даных і строга адрозніваюцца ад масіваў. Выкарыстоўвайце масіў (стандартная бібліятэка) або 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, экспанентны запіс, шаснаццатковы і г.д.)
Колькасць разрадаў часткі мантысы можна задаць. Калі ў якасці аргумента выкарыстоўваецца вялікі рэгістр, то выхадны радок таксама з’яўляецца вялікім рэгістрам.
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() можа быць прынцып: 2 для двайковага, 8 для васьмярковага і 16 для шаснаццатковага, які пераўтворыць радок у лік.
Калі зададзены 0, кожная з наступных радкоў з прэфіксам пераўтворыцца ў цэлае лік.
0b
- двайковыя лічбы
0o
- васьмярковая
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]