在python中,包括我们之前已经讲过列表、元组及字符串的一些用法了,大家应该可以感觉到,这三种“数据类型”还是有很多相同之处的,所以python中也可以轻易的实现三种类型之间的转换,当然本篇文章还会补充和它们相关的一些方法。
8.1 转换为列表方法–list()
list这个单词我们在讲列表的时候已经很熟悉了,因为定义一个列表时经常是:
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9 ,10]
建立一个空列表时也是:
a = list()
print(a)
结果:
[]
所以给列表起名为“list1”、“list2”不是没理由的,但是在这里,list()又变成了一种方法,他的作用是可以将一个“可迭代对象”转换为列表,关于迭代,我在一本书上看到了一个比较好理解的说法:所谓迭代,就是重复反馈的过程,其目的通常是为了接近并达到所需的结果。每一次对过程的重复就是一次“迭代”,而每一次迭代得到的结果都会被用来作为下一次的初始值进行下一次“迭代”,所以迭代一般都是反复重复的过程,当然for循环也是一种迭代。
当list()内没有参数时就是建立一个空列表,如果在里面加一个“字符串”参数呢,我们试一下:
a = "HopesLi"
b = list(a)
print(b)
结果:
['H', 'o', 'p', 'e', 's', 'L', 'i']
是不是很神奇?通过list()方法可以直接将字符串的每一个字符拆分开,然后按照顺序排列在列表里,要知道,这种操作在C语言里可没这么简单;所以这个list()方法一定要记住。
8.2 转换为元组方法–tuple()
上面我们讲了讲“可迭代对象”转换为列表的方法–list(),那这里转换为元组的方法其实也大相径庭,我们也肯定知道定义一个空元组的方式:
a = tuple()
print(a)
结果:
()
所以同样可以使用tuple()来将一个“字符串”转换为元组:
a = "HopesLi"
b = tuple(a)
print(b)
结果:
('H', 'o', 'p', 'e', 's', 'L', 'i')
所以轻易可以看出来tuple()和list()的转换效果基本是一样的。
8.3 转换为字符串方法–str()
说到str(),我们肯定能想到int()、float()等强制类型转换的用法,当然,list()和tuple()感觉也是一种强制类型转换,那这里我们类比一下,既然a = list() 和 b = tuple()分别是定义一个空列表和一个空元组,那么c = str()是不是就代表定义一个“空字符串”?这个说法还挺新奇,当然我们可以试一下到底对不对:
a = str()
print(a)
print(type(a))
结果:
#注意,这里是有输出的
<class 'str'>
可以看出来,确实和我们想的一样,c = str()确实是定义了一个“空字符串”,但是这样并没有啥意义,所以就鲜有人提起;那么同样的,我们是不是也可以把字符串或元组转换为字符串呢?同样我们也进行尝试:
a = [1,2,3]
b = str(a)
print(b)
print(type(b))
结果:
[1, 2, 3]
<class 'str'>
我们这里可能会有个大大的问号,显然通过type获得的数据类型为“字符串”类型是可以理解的,但是为啥输出结果还是“[1,2,3]”呢?不妨我们把当前的“b”再转换回列表试试:
a = [1,2,3]
b = str(a)
print(b)
c = list(b)
print(c)
结果:
[1, 2, 3]
['[', '1', ',', ' ', '2', ',', ' ', '3', ']']
怎么样?是不是可以理解了,上面输出的“[1,2,3]”其实把每一个符号或数字都变成了字符串中的字符,当我们再将它转换回列表后就能发现每一个符号和数字都被当成了一个列表中的“元素”,好好理解一下。
8.4 取最大值方法–max()
max()方法的作用是返回一个列表或者元组等集合中的最大值,当然,max()内的参数可以是列表、元组也可以是某些数的集合,非常简单,举例说明:
a = [2, 4, 7, 4, 5]
print(max(a))
b = (3, 8, 9, 2, 4)
print(max(b))
print(max(4, 8, 9))
结果:
7
9
9
结果很明显,我们不再赘述。
8.5 取最小值方法–min()
min()方法的作用就很明显了,返回一个列表或者元组等集合中的最小值,用法和max()方法一样,直接举例说明:
a = [2, 4, 7, 4, 5]
print(min(a))
b = (3, 8, 9, 2, 4)
print(min(b))
print(min(4, 8, 9))
结果:
2
2
4
同样用法非常简单,但是会不会有人想问:如果是不同类型的参数进行比较结果会是怎样。?我们不妨试一试:
a = [1, "hopes", 4, "li"]
print(min(a))
结果:
Traceback (most recent call last):
File "test.py", line 2, in <module>
print(min(a))
TypeError: ' not supported between instances of 'str' and 'int'
结果给我们的错误信息很明显:“not supported between instances of ‘str’ and ‘int’”,这代表str和int类型的数据不能够相互比较,也就代表不管是max()还是min(),它们都只能进行相同数据类型的比较。
8.6 获得参数长度方法–len()
len()方法用于返回给定参数的长度,比如:
str1 = "HopesLi"
print(len(str1))
list1 = [1,2,3]
print(len(list1))
tuple1 = (2,3,4,5)
print(len(tuple1))
结果:
7
3
4
同样用法非常明显。
8.7 求和方法–sum()
sum()用于返回参数的总和,参数可以为列表、元组以及集合等,但是既然是可以相加的方法,那么不管是列表、元组还是集合内的元素都需要为可加的数字类型,同样举例说明:
a = [1,3,4]
print(sum(a))
print(sum(a,5))
结果:
8
13
当然如果我们尝试把字符串类型加入进行求和呢?
a = [1,3,4,"hopes"]
print(sum(a))
结果:
Traceback (most recent call last):
File "test.py", line 2, in <module>
print(sum(a))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
错误信息提示“unsupported operand type(s) for +: ‘int’ and ‘str’”不能够将int类型和str类型进行相加(其实都不用试,这是肯定的)。
8.8 排序方法sorted()
sorted()方法用于返回一个排序好的列表或元组,但只能是一个参数,不能把一些数的集合当作参数,举例说明:
a = (2,5,3)
print(sorted(a))
结果:
[2, 3, 5]
看到这个结果发现问题了没有,我明明定义的a是一个元组,但是为什么排序输出后是一个列表?没错,这确实是sortes()和sort()方法的区别,sort()是直接原地排序,但是sorted()却是返回一个排序好的“新列表”,也就是说sorted()方法在执行后后自己分配一个内存空间用来存储排序好的新列表。
那接下来我们试一下使用sorted()方法排序多个数字组成的集合会是怎样?
print(sorted(3,5,2))
结果:
Traceback (most recent call last):
File "test.py", line 2, in <module>
print(sorted(3,5,2))
TypeError: sorted expected 1 argument, got 3
错误信息提示我们“sorted expected 1 argument, got 3”只能传入1个参数,但我们却给了3个,所以我们这里确定,排序只能传入一个参数,可以是列表、元组等。
8.9 生成二元组方法enumerate()
enumerate()方法用于生成一个由二元组组成的迭代对象,注意,这里返回的是一个迭代对象,迭代对象是啥样的?我们试一下:
str1 = "hopes"
print(enumerate(str1))
结果:
如上,迭代对象貌似只是一个“代号”,我们从中好像并不能直接获取什么信息,所以迭代对象我们需要通过for循环将其进行遍历:
str1 = "hopes"
print(enumerate(str1))
for i in enumerate(str1):
print(i)
结果:
object at 0x10f30c840>
(0, 'h')
(1, 'o')
(2, 'p')
(3, 'e')
(4, 's')
看吧,我们通过enumerate()方法将str1的所有字符拆分并且以二元组的形式显示出来了,并且我们也明白了一件事:迭代对象需要使用for循环进行“拆包”。