组合数据类型
- 不像C语言,PYTHON函数可以输出多个返回值,如
def fun(a,b):
"返回多个值,结果以元组形式表示"
return a,b,a+b
print(fun(1,2))``
- 序列(list类型)和集合(set类型)
序列有顺序,可以分片,特殊的序列(元组)一旦创建就不能被修改,元素可重复 用()创建(半角符号)
集合元素无顺序,不能分片,元素可以动态增加或删除,同时集合元素独一无二,可以过滤掉重复元素 用{ }创建 - set(x) 函数
该函数可以生成任何集合,输入任何元素,得到无重复排序任意的集合
列表和数组的差别
C语言采取数组,而Python采用列表。列表和数组都是用于存放一个或者多个元素的方法。
- 数组需要预先分配大小,但是列表不需要。列表可以在使用中动态插入任何数量的元素
- 数组要求元素类型一致,而列表不需要
值得注意的是,列表必须通过直接的数据赋值才能生成,简单的将一个列表赋值给另一个列表并不会产生新的列表对象,如
事实上lt和ls都指向同一组数据,因此修改了lt ls也会被修改。
实例:基本统计值计算
在写这个实例时,我遇到了点小问题
如图所示,如果我直接写成nums.append(x)
,则得到的列表会变成
显然列表中的数值是string类型的值,而不是我要的数字。问题就出在 input
函数中。
在Python3中默认input
函数输入的数据是str
类型,而eval()
的作用是将输入的字符串当成表达式进行运算,我的理解是把字符串的’ ‘去掉。
字典数据类型
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {}.
键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
值可以取任何数据类型,但是键必须是不可变的,如字符串、数字或元组。
因此如list就不能作为键使用(直接报错),因为可以修改,一旦改了数据就永远丢失了。(只是我的粗略的理解,具体解释请看https://blog.youkuaiyun.com/sinat_32547403/article/details/73613222)
列表推导式
Python对列表进行循环操作时可以使用列表推导式代替多层的for,例如
ls=[i for i in range(1,101)]
lt=[i for i in 'Python'] #lt=['P', 'y', 't', 'h', 'o', 'n']
此外推导式中还可以增加筛选条件
print([i for i in range(11) if i > 4])
还可以这样
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
# 方法一: 普通方法
l4 = []
for i in names:
for j in i:
if j.count('e') >= 2:
l4.append(j)
print(l4)
# 方法二: 列表推导式方法
print([j for i in names for j in i if j.count('e') >= 2 ])
#引用自https://www.cnblogs.com/zanao/p/11061738.html
除了列表,在字典上也可以用推导式
dict={key:value for key in 'Python' for value in range(6)
#{'P': 5, 'y': 5, 't': 5, 'h': 5, 'o': 5, 'n': 5} ~~其实我不太理解为什么每个值都是5...~~
同理我们可以用推导式对整个字典中键或值进行修改(也可以加筛选条件)