Python 数据类型转换(Casting)

Python中,将数据由当前类型变化为其他类型的操作。数据类型转换分为两类,分别是自动数据类型转换和强制数据类型转换。自动转换是程序根据运算要求进行的转换,不需要人工干预。强制数据类型转换是根据程序需要,由编写程序人员人为改变数据类型的方式。本文主要介绍Python中,int、float、float、tuple、list、set、dict等类型之间的转换方法,以及相关的示例代码

1、数值类型转换

Python 中,数值类型转换(数值类型铸造)用于在不同数值类型之间进行转换。常见的数值类型包括整数 (int)、浮点数 (float) 和复数 (complex)。

1)整数和浮点数互转:

x = 5
y = float(x)
print(y)  # 输出: 5.0

x = 5.67
y = int(x)
print(y)  # 输出: 5

2)整数和复数互转

x = 10
y = complex(x)
print(y)  # 输出: (10+0j)

x = 10
y = complex(x)
print(y)  # 输出: (10+0j)

3)布尔值和整数互转

b = True
i = int(b)
print(i)  # 输出: 1

b = False
i = int(b)
print(i)  # 输出: 0

# 整数 1 转换为布尔值
i = 1
b = bool(i)
print(b)  # 输出: True

# 整数 0 转换为布尔值
i = 0
b = bool(i)
print(b)  # 输出: False

# 非零整数转换为布尔值
i = 42
b = bool(i)
print(b)  # 输出: True

注意:

将浮点数转换为整数时,小数部分会被截断,可能会导致精度损失。

x = 3.9
y = int(x)
print(y)  # 输出: 3

2、字符串和数值之间的转换

Python 中,字符串和数值之间的转换是常见的操作,尤其是在处理用户输入或文件读写时。

1)字符串和整数互转

s = "123"
i = int(s)
print(i)  # 输出: 123

i = 123
s = str(i)
print(s)  # 输出: "123"

2)字符串和浮点数互转:

s = "123.45"
f = float(s)
print(f)  # 输出: 123.45

f = 123.45
s = str(f)
print(s)  # 输出: "123.45"

3)字符串和复数互转

s = "1+2j"
c = complex(s)
print(c)  # 输出: (1+2j)

c = 1 + 2j
s = str(c)
print(s)  # 输出: "(1+2j)"

如果字符串包含无效的复数格式,则会引发异常:

s = "1+2jabc"
try:
    c = complex(s)
except ValueError as e:
    print(e)  # 输出: complex() arg is a malformed string

3、列表、集合和元组之间的转换

Python 中,列表、集合和元组是三种常用的容器类型,它们之间的转换可以帮助在不同场景中灵活处理数据。

1)列表和元组互转:

# 列表转换为元组
lst = [1, 2, 3, 4, 5]
tup = tuple(lst)
print(tup)  # 输出: (1, 2, 3, 4, 5)

# 元组转换为列表
tup = (1, 2, 3, 4, 5)
lst = list(tup)
print(lst)  # 输出: [1, 2, 3, 4, 5]

2)列表和集合互转:

lst = [1, 2, 2, 3]
s = set(lst)
print(s)  # 输出: {1, 2, 3}

s = {1, 2, 3}
lst = list(s)
print(lst)  # 输出: [1, 2, 3]

3)元组和集合互转

s = {1, 2, 3}
tup = tuple(s)
print(tup)  # 输出: (1, 2, 3)

tup = (1, 2, 2, 3)
s = set(tup)
print(s)  # 输出: {1, 2, 3}

5、字符串与其他容器类型之间的转换

Python 中,字符串可以与其他容器类型(如列表、元组、集合等)进行转换。这在处理字符数据、解析输入或生成特定格式的输出时非常有用。

1)字符串和列表互转:

s = "hello"
lst = list(s)
print(lst)  # 输出: ['h', 'e', 'l', 'l', 'o']

lst = ['h', 'e', 'l', 'l', 'o']
s = ''.join(lst)
print(s)  # 输出: "hello"

2)字符串和元组互转:

s = "hello"
tup = tuple(s)
print(tup)  # 输出: ('h', 'e', 'l', 'l', 'o')

3)字符串和集合互转

# 字符串转换为集合
s = "hello"
char_set = set(s)
print("字符串转换为集合:", char_set)  # 输出: {'e', 'h', 'l', 'o'}

# 集合转换为字符串
char_set = {'e', 'h', 'l', 'o'}
s = ''.join(char_set)
print("集合转换为字符串:", s)  # 输出的字符串顺序可能是随机的,如 "ehlo"

6、Python类型转换示例代码

# int(x[, base]) 将x转换为一个整数,base为进制,默认十进制
#
# long(x[, base] ) 将x转换为一个长整数
#
# float(x) 将x转换到一个浮点数
#
# complex(real[, imag])  创建一个复数
#
# str(x) 将对象 x 转换为字符串
#
# repr(x) 将对象 x 转换为表达式字符串
#
# eval(str)  用来计算在字符串中的有效Python表达式, 并返回一个对象
#
# tuple(s) 将序列 s 转换为一个元组
#
# list(s) 将序列 s 转换为一个列表
#
# set(s) 转换为可变集合
#
# dict(d) 创建一个字典。d 必须是一个序列(key, value) 元组。
#
# frozenset(s) 转换为不可变集合
#
# chr(x) 将一个整数转换为一个字符
#
# unichr(x) 将一个整数转换为Unicode字符
#
# ord(x) 将一个字符转换为它的整数值
#
# hex(x) 将一个整数转换为一个十六进制字符串
#
# oct(x)  将一个整数转换为一个八进制字符串
if __name__ == "__main__":
    print(int(1.2)) # 1
    print(int('12', 16)) # 18
    print(float(1)) # 1.0
    print(float('123')) # 123.0
    # complex() 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。
    print(complex(1, 2)) # (1+2j)
    print(complex("1")) # (1+0j)
    dict1 = {'a': 'b', 'c': 'd'};
    print(type(str(dict1))) # {'a': 'b', 'c': 'd'} <class 'str'>
    print(eval('pow(2,2)')) # 4
    print(tuple([1,2,3,4])) # (1, 2, 3, 4)
    aTuple = (123, 'xyz', 'zara', 'abc');
    print(list(aTuple)) # [123, 'xyz', 'zara', 'abc']
    #set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等
    x = set("yangs")
    print(x) # {'y', 's', 'n', 'a', 'g'}
    print(type(x)) # <class 'set'>
    y = set('yy')
    print(x & y) # 交集 {'y'}
    print(x | y) # 并集 {'n', 's', 'g', 'a', 'y'}
    print(x ^ y) # 非集 {'n', 'g', 'a', 's'}
    print(x - y) # 差集 {'n', 'g', 's', 'a'}
    print(dict(a='a', b='b', t='t')) # {'a': 'a', 'b': 'b', 't': 't'}
    print(dict(zip(["a","b"], ["c","d"]))) # {'a': 'b', 'c': 'd'}
    print(dict([(1, 2), (3, 4)])) # {1: 2, 3: 4}
    # frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
    print(frozenset("yangs")) # frozenset({'s', 'y', 'g', 'n', 'a'})
    print(type(frozenset("yangs"))) # <class 'frozenset'>
    #chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
    print(chr(123)) # {
    print(chr(48)) # '0'
    print(ord('a')) # 97
    print(ord('0')) # 48
    # 将10进制整数转换成16进制,以字符串形式表示
    print(hex(255)) # 0xff
    print(hex(0)) # 0x0
    
    #将一个整数转换成8进制字符串
    print(oct(10)) # 0o12

推荐阅读
cjavapy编程之路首页