一、数据

1.什么是数据?

x=10,10 是我们要存储的数据

2.为何数据要分不同的类型

数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示

3.数据类型

数字

字符串

列表

元组

字典

集合

二、数据类型

数字 int

数字主要是用于计算用的,使用方法并不是很多,就记住一种就可以:

bit_length() 当十进制用二进制表示时,最少使用的位数

  1. v = 11
  2. data = v.bit_length()
  3. print(data)

布尔值 bool

布尔值就两种:True,False。就是反应条件的正确与否。

真 1 True。

假 0 False。

字符串 str

用 “ “ 、’ ‘ 、’’’ ‘’’或者””” “””。中间包含的部分称之为字符串

  1. PS:即使里面写入的是数字,那么他的数据类型也是字符串

1、字符串的索引与切片

索引即下标,就是字符串组成的元素从第一个开始,初始索引为 0 以此类推。

  1. a = 'ABCDEFGHIJK'
  2. print(a[0])
  3. print(a[3])
  4. print(a[5])
  5. print(a[7])

执行输出

A

D

F

H

切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾头不顾腚)。

  1. a = 'ABCDEFGHIJK'
  2. print(a[0:3])
  3. print(a[2:5])
  4. print(a[0:]) #默认到最后
  5. print(a[0:-1]) #-1 就是最后一个
  6. print(a[0:5:2]) #加步长
  7. print(a[5:0:-2]) #反向加步长

执行输出

ABC

CDE

ABCDEFGHIJK

ABCDEFGHIJ

ACE

FDB

2、字符串常用方法

  1. #captalize,swapcase,title
  2. name = "ximenchunxue"
  3. print(name.capitalize()) #首字母大写
  4. print(name.swapcase()) #大小写翻转
  5. msg='egon say hi'
  6. print(msg.title()) #每个单词的首字母大写

执行输出

Ximenchunxue

XIMENCHUNXUE

Egon Say Hi

  1. # 内容居中,总长度,空白处填充
  2. name = "ximenchunxue"
  3. ret2 = name.center(20,"*")
  4. print(ret2)

执行输出

ximenchunxue

  1. #数字符串中的元素出现的个数。
  2. name = "ximenchunxue"
  3. print(name[0:10])
  4. ret3 = name.count("n",0,10) # 可切片
  5. print(ret3)

执行输出

ximenchunx

2

解释:

0,10 表示从左至右取出 10 个字符串,那么结果为 ximenchunx,字母 n 在里面出现了 2 次

  1. a2 = "hqw\t1"
  2. '''
  3. expandtabs() 方法把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8。
  4. 默认将一个 tab 键变成 8 个空格,如果 tab 前面的字符长度不足 8 个,则补全 8 个,
  5. 如果 tab 键前面的字符长度超过 8 个不足 16 个则补全 16 个,以此类推每次补全 8 个。
  6. '''
  7. ret4 = a2.expandtabs()
  8. print(ret4)

执行输出

hqw 1

  1. a4 = "dkfjdkfasf54"
  2. #startswith 判断是否以...开头
  3. #endswith 判断是否以...结尾
  4. ret4 = a4.endswith('jdk',3,6) # 顾头不顾尾
  5. print(ret4) # 返回的是布尔值
  6. ret5 = a4.startswith("kfj",1,4)
  7. print(ret5)

执行输出

True

True

  1. #寻找字符串中的元素是否存在
  2. a4 = "dkfjdkfasf54"
  3. ret6 = a4.find("fjdk",1,6)
  4. print(ret6) # 返回的找到的元素的索引,如果找不到返回-1

执行输出

2

  1. a4 = "dkfjdkfasf54"
  2. ret61 = a4.index("fjdk",4,6)
  3. print(ret61) # 返回的找到的元素的索引,找不到报错。

执行输出以下结果,报错了

Traceback (most recent call last):

File “E:/python_script/day1/test.py”, line 3, in

ret61 = a4.index(“fjdk”,4,6)

ValueError: substring not found

  1. #split 以什么分割,最终形成一个列表此列表不含有这个分割的元素。
  2. ret9 = 'title,Tilte,atre,'.split('t')
  3. print(ret9)
  4. ret91 = 'title,Tilte,atre,'.rsplit('t',1)
  5. print(ret91)

执行输出

[‘’, ‘i’, ‘le,Til’, ‘e,a’, ‘re,’]

[‘title,Tilte,a’, ‘re,’]

  1. #format 的三种玩法 格式化输出
  2. res='{} {} {}'.format('egon',18,'male')
  3. print(res)
  4. res='{1} {0} {1}'.format('egon',18,'male')
  5. print(res)
  6. res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)
  7. print(res)

执行输出

egon 18 male

18 egon 18

egon 18 male

  1. #strip
  2. name='*egon**'
  3. print(name.strip('*'))
  4. print(name.lstrip('*'))
  5. print(name.rstrip('*'))

执行输出

egon

egon**

*egon

  1. #replace
  2. name='alex say :i have one tesla,my name is alex'
  3. print(name.replace('alex','SB',1))

执行输出

SB say :i have one tesla,my name is alex

  1. #####is 系列
  2. name='jinxin123'
  3. print(name.isalnum()) #字符串由字母或数字组成
  4. print(name.isalpha()) #字符串只由字母组成
  5. print(name.isdigit()) #字符串只由数字组成

执行输出

True

False

False

元祖 tupe

元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组。例:(1,2,3)(”a”,”b”,”c”)

列表 list

列表是 python 中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如 js 中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:

  1. li = ['alex',123,True,(1,2,3,'wusir'),[1,2,3,'小明',],{'name':'alex'}]

列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32 位 python 的限制是 536870912 个元素,64 位 python 的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。

  1. li = [1,'a','b',2,3,'a']
  2. li.insert(0,55) #按照索引去增加
  3. print(li)
  4. li.append('aaa') #增加到最后
  5. li.append([1,2,3]) #增加到最后
  6. print(li)
  7. li.extend(['q,a,w']) #迭代的去增
  8. li.extend(['q,a,w','aaa'])
  9. li.extend('a')
  10. li.extend('abc')
  11. li.extend('a,b,c')
  12. print(li)

执行输出

[55, 1, ‘a’, ‘b’, 2, 3, ‘a’]

[55, 1, ‘a’, ‘b’, 2, 3, ‘a’, ‘aaa’, [1, 2, 3]]

[55, 1, ‘a’, ‘b’, 2, 3, ‘a’, ‘aaa’, [1, 2, 3], ‘q,a,w’, ‘q,a,w’, ‘aaa’, ‘a’, ‘a’, ‘b’, ‘c’, ‘a’, ‘,’, ‘b’, ‘,’, ‘c’]

  1. li = [1,'a','b',2,3,'a']
  2. l1 = li.pop(1) #按照位置去删除,有返回值
  3. print(l1)
  4. del li[1:3] #按照位置去删除,也可切片删除没有返回值。
  5. print(li)
  6. li.remove('a') #按照元素去删除
  7. print(li)
  8. li.clear() #清空列表

执行输出

a

[1, 3, ‘a’]

[1, 3]

  1. li = [1,'a','b',2,3,'a']
  2. li[1] = 'dfasdfas'
  3. print(li)
  4. li[1:3] = ['a','b']
  5. print(li)

执行输出

[1, ‘dfasdfas’, ‘b’, 2, 3, ‘a’]

[1, ‘a’, ‘b’, 2, 3, ‘a’]

切片去查,或者循环去查。

其他操作

count(数)(方法统计某个元素在列表中出现的次数)。

  1. a = ["q","w","q","r","t","y"]
  2. print(a.count("q"))

执行输出

2

index(方法用于从列表中找出某个值第一个匹配项的索引位置)

  1. a = ["q","w","r","t","y"]
  2. print(a.index("r"))

执行输出

2

sort (方法用于在原位置对列表进行排序)。

reverse (方法将列表中的元素反向存放)。

  1. a = [2,1,3,4,5]
  2. a.sort()# 他没有返回值,所以只能打印a
  3. print(a)
  4. a.reverse()#他也没有返回值,所以只能打印a
  5. print(a)

执行输出

[1, 2, 3, 4, 5]

[5, 4, 3, 2, 1]

字典 dict

字典是 python 中唯一的映射类型,采用键值对(key-value)的形式存储数据。python 对 key 进行哈希函数运算,根据计算的结果决定 value 的存储地址,所以字典是无序存储的,且 key 必须是可哈希的。可哈希表示 key 必须是不可变类型,如:数字、字符串、元组。

字典(dictionary)是除列表意外 python 之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

  1. dic = {'zhang':'k'}
  2. dic['li'] = ["a","b","c"]
  3. print(dic)
  4. #setdefault 在字典中添加键值对,如果只有键那对应的值是none,但是如果原字典中存在设置的键值对,则他不会更改或者覆盖。
  5. dic.setdefault('k','v')
  6. print(dic) # {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'}
  7. dic.setdefault('k','v1') # {'age': 18, 'name': 'jin', 'sex': 'male', 'k': 'v'}
  8. print(dic)

执行输出

{‘li’: [‘a’, ‘b’, ‘c’], ‘zhang’: ‘k’}

{‘k’: ‘v’, ‘li’: [‘a’, ‘b’, ‘c’], ‘zhang’: ‘k’}

{‘k’: ‘v’, ‘li’: [‘a’, ‘b’, ‘c’], ‘zhang’: ‘k’}

  1. dic = {'name':'zhang','age':23}
  2. dic_pop = dic.pop("a",'无key默认返回值') # pop根据key删除键值对,并返回对应的值,如果没有key则返回默认返回值
  3. print(dic_pop)
  4. del dic["name"] # 没有返回值。
  5. print(dic)
  6. dic_pop1 = dic.popitem() # 随机删除字典中的某个键值对,将删除的键值对以元祖的形式返回
  7. print(dic_pop1) # ('name','jin')
  8. dic_clear = dic.clear() # 清空字典
  9. print(dic,dic_clear) # {} None

执行输出

无 key 默认返回值

{‘age’: 23}

(‘age’, 23)

{} None

  1. dic = {"name":"jin","age":18,"sex":"male"}
  2. dic2 = {"name":"alex","weight":75}
  3. dic2.update(dic) # 将dic所有的键值对覆盖添加(相同的覆盖,没有的添加)到dic2中
  4. print(dic2)

执行输出

{‘age’: 18, ‘name’: ‘jin’, ‘weight’: 75, ‘sex’: ‘male’}

  1. dic = {"name":"jin","age":18,"sex":"male"}
  2. value1 = dic["name"] # 没有会报错
  3. print(value1)
  4. value2 = dic.get("djffdsafg","默认返回值") # 没有可以返回设定的返回值
  5. print(value2)

执行输出

jin

默认返回值

其他操作

  1. dic = {"name":"jin","age":18,"sex":"male"}
  2. item = dic.items()
  3. print(item,type(item)) # dict_items([('name', 'jin'), ('sex', 'male'), ('age', 18)]) <class 'dict_items'>
  4. #这个类型就是dict_items类型,可迭代的
  5. keys = dic.keys()
  6. print(keys,type(keys)) # dict_keys(['sex', 'age', 'name']) <class 'dict_keys'>
  7. values = dic.values()
  8. print(values,type(values)) # dict_values(['male', 18, 'jin']) <class 'dict_values'> 同上

执行输出

dict_items([(‘sex’, ‘male’), (‘age’, 18), (‘name’, ‘jin’)])

dict_keys([‘sex’, ‘age’, ‘name’])

dict_values([‘male’, 18, ‘jin’])

字典的循环

  1. dic = {"name":"jin","age":18,"sex":"male"}
  2. for key in dic:
  3. print(key)
  4. for item in dic.items():
  5. print(item)
  6. for key,value in dic.items():
  7. print(key,value)

执行输出

age

sex

name

(‘age’, 18)

(‘sex’, ‘male’)

(‘name’, ‘jin’)

age 18

sex male

name jin

三,其他(for,enumerate,range)

for 循环:用户按照顺序循环可迭代对象的内容。

  1. msg = '我是最好的'
  2. for item in msg:
  3. print(item)
  4. li = ['alex','银角','女神','egon','太白']
  5. for i in li:
  6. print(i)
  7. dic = {'name':'太白','age':18,'sex':'man'}
  8. for k,v in dic.items():
  9. print(k,v)

执行输出:

alex

银角

女神

egon

太白

name 太白

age 18

sex man

enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate 将其组成一个索引序列,利用它可以同时获得索引和值。

  1. li = ['alex','银角','女神','egon','太白']
  2. for i in enumerate(li):
  3. print(i)
  4. for index,name in enumerate(li,1):
  5. print(index,name)
  6. for index, name in enumerate(li, 100): # 起始位置默认是0,可更改
  7. print(index, name)

执行输出:

(0, ‘alex’)

(1, ‘银角’)

(2, ‘女神’)

(3, ‘egon’)

(4, ‘太白’)

1 alex

2 银角

3 女神

4 egon

5 太白

100 alex

101 银角

102 女神

103 egon

104 太白

range:指定范围,生成指定数字

  1. for i in range(1,10):
  2. print(i)
  3. print('======')
  4. for i in range(1,10,2): # 步长
  5. print(i)
  6. print('++++++')
  7. for i in range(10,1,-2): # 反向步长
  8. print(i)

执行输出

1

2

3

4

5

6

7

8

9

======

1

3

5

7

9

++++++

10

8

6

4

2