Python 数据转换详解(python数据转换问题)
itomcoil 2025-05-02 18:58 17 浏览
数据转换是编程中非常重要的操作,Python 提供了多种方式来实现不同类型之间的转换。下面我将详细讲解 Python 中的各种数据转换方法。
一、基本数据类型转换
1. 数字类型之间的转换
# 整数转浮点数
num_int = 10
num_float = float(num_int) # 10.0
# 浮点数转整数(会截断小数部分)
num_float = 3.14
num_int = int(num_float) # 3
# 布尔值转数字
bool_true = True
num_from_bool = int(bool_true) # 1
bool_false = False
num_from_bool = int(bool_false) # 0
2. 字符串与数字的转换
# 字符串转整数
str_num = "123"
int_num = int(str_num) # 123
# 字符串转浮点数
str_float = "3.14"
float_num = float(str_float) # 3.14
# 数字转字符串
num = 42
str_num = str(num) # "42"
# 注意:无效转换会引发 ValueError
try:
invalid = int("hello")
except ValueError as e:
print(f"错误: {e}")
3. 布尔值转换
# 其他类型转布尔
# 以下会转换为 False
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False
print(bool([])) # False
print(bool({})) # False
print(bool(None)) # False
# 其他值通常转换为 True
print(bool(1)) # True
print(bool(-1)) # True
print(bool(" ")) # True
print(bool([1])) # True
二、容器类型转换
1. 列表(list)与其他容器的转换
# 元组转列表
my_tuple = (1, 2, 3)
my_list = list(my_tuple) # [1, 2, 3]
# 集合转列表
my_set = {1, 2, 3}
my_list = list(my_set) # [1, 2, 3](顺序可能不同)
# 字典转列表(默认获取键)
my_dict = {'a': 1, 'b': 2}
key_list = list(my_dict) # ['a', 'b']
value_list = list(my_dict.values()) # [1, 2]
item_list = list(my_dict.items()) # [('a', 1), ('b', 2)]
# 字符串转列表
my_str = "hello"
char_list = list(my_str) # ['h', 'e', 'l', 'l', 'o']
2. 元组(tuple)转换
# 列表转元组
my_list = [1, 2, 3]
my_tuple = tuple(my_list) # (1, 2, 3)
# 集合转元组
my_set = {1, 2, 3}
my_tuple = tuple(my_set) # (1, 2, 3)(顺序可能不同)
# 字典转元组
my_dict = {'a': 1, 'b': 2}
key_tuple = tuple(my_dict) # ('a', 'b')
3. 集合(set)转换
# 列表转集合(自动去重)
my_list = [1, 2, 2, 3]
my_set = set(my_list) # {1, 2, 3}
# 字符串转集合
my_str = "hello"
char_set = set(my_str) # {'h', 'e', 'l', 'o'}(去重且无序)
4. 字典(dict)转换
# 键值对列表转字典
pairs = [('a', 1), ('b', 2)]
my_dict = dict(pairs) # {'a': 1, 'b': 2}
# 两个列表转字典(使用zip)
keys = ['a', 'b']
values = [1, 2]
my_dict = dict(zip(keys, values)) # {'a': 1, 'b': 2}
# 字典推导式
my_dict = {k: v for k, v in pairs} # {'a': 1, 'b': 2}
三、高级数据转换
1. 进制转换
# 十进制转其他进制字符串
num = 255
print(bin(num)) # '0b11111111'(二进制)
print(oct(num)) # '0o377'(八进制)
print(hex(num)) # '0xff'(十六进制)
# 其他进制字符串转十进制
print(int('0b11111111', 2)) # 255
print(int('0o377', 8)) # 255
print(int('0xff', 16)) # 255
2. ASCII码转换
# 字符转ASCII码
print(ord('A')) # 65
# ASCII码转字符
print(chr(65)) # 'A'
3. 字节(bytes)转换
# 字符串转字节
my_str = "hello"
byte_data = my_str.encode('utf-8') # b'hello'
# 字节转字符串
new_str = byte_data.decode('utf-8') # 'hello'
# 整数列表转字节
int_list = [65, 66, 67]
byte_data = bytes(int_list) # b'ABC'
4. JSON转换
import json
# Python对象转JSON字符串
data = {'name': 'Alice', 'age': 25}
json_str = json.dumps(data) # '{"name": "Alice", "age": 25}'
# JSON字符串转Python对象
new_data = json.loads(json_str) # {'name': 'Alice', 'age': 25}
四、自定义对象转换
1. 实现__str__和__repr__
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"Person(name={self.name}, age={self.age})"
def __repr__(self):
return f"Person('{self.name}', {self.age})"
p = Person("Alice", 25)
print(str(p)) # Person(name=Alice, age=25)
print(repr(p)) # Person('Alice', 25)
2. 实现转换方法
class Temperature:
def __init__(self, celsius):
self.celsius = celsius
def to_fahrenheit(self):
return (self.celsius * 9/5) + 32
temp = Temperature(100)
print(temp.to_fahrenheit()) # 212.0
五、注意事项
类型安全:转换前最好检查类型或使用try-except处理可能的异常
try:
num = int("123a")
except ValueError:
print("无法转换为整数")
精度丢失:浮点数转整数会截断小数部分
print(int(3.99)) # 3(不是4)
隐式转换:某些操作会自动进行类型转换
print(1 + 2.0) # 3.0(整数自动转为浮点数)
不可逆转换:某些转换会丢失信息且不可逆
original = [1, 2, 2, 3]
converted = set(original) # {1, 2, 3}
# 无法恢复原始列表的顺序和重复元素
一看就会,一写就废,你学废了吗?
相关推荐
- selenium(WEB自动化工具)
-
定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...
- 开发利器丨如何使用ELK设计微服务中的日志收集方案?
-
【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...
- 高并发系统设计:应对每秒数万QPS的架构策略
-
当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...
- 2025 年每个 JavaScript 开发者都应该了解的功能
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...
- JavaScript Array 对象
-
Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...
- Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战
-
刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...
- 动力节点最新JavaScript教程(高级篇),深入学习JavaScript
-
JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...
- 一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code
-
当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...
- 「晚安·好梦」努力只能及格,拼命才能优秀
-
欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...
- JavaScript 中 some 与 every 方法的区别是什么?
-
大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...
- 10个高效的Python爬虫框架,你用过几个?
-
小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...
- 12个高效的Python爬虫框架,你用过几个?
-
实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...
- pip3 install pyspider报错问题解决
-
运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...
- PySpider框架的使用
-
PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...
- 「机器学习」神经网络的激活函数、并通过python实现激活函数
-
神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)