python 3-4(2019-11-07 ) Python基础 (四)

-- coding: utf-8 --

@Time : 2019/11/7 8:56

@Author : Nix Chen

@Email : lethe4ever@163.com

@File : demo13_20191107.py

@Software: PyCharm

切片

对序列截取一部分的操作
字符串,列表,元组都支持切片操作

l1 = [i for i in range(10)]
print(l1) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(l1[2]) # 2
# 格式:对象[start:end:step] 左闭右开 省略 start代表从零开始,end代表包括最后,步长省略代表1
print(l1[2:7]) # [2, 3, 4, 5, 6]
print(l1[2:]) # [2, 3, 4, 5, 6, 7, 8, 9]
print(l1[0:4:2]) # [0, 2]
print(l1[0:2]) # [0, 1]
print(l1[-4:-2]) # [6, 7]
print(l1[-4:2]) # []
print(l1[-1:-3:-1]) # [9, 8]
print(l1[-1:1:-1]) # [9, 8, 7, 6, 5, 4, 3, 2]
print(l1[3:1:-1]) # [3, 2]
print(l1[3:-3:-1]) # []
print(l1[::]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(l1[:]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(l1[::2]) # [0, 2, 4, 6, 8]
# 反转这个列表
print(l1[::-1]) # print(li[])

使用切片来原地修改列表的的内容

a = [3, 5, 7]
a[len(a):] = [9]
print(a) # [3, 5, 7, 9]
a[:3] = [1, 2, 3]
print(a) # [1, 2, 3, 9]
a[:3] = []
print(a) # [9]

使用del 和 切片结合删除列表的元素

a = [3, 5, 7, 9, 11]

del a[:3]
print(a) # [9, 11]
a = [3, 5, 7, 9, 11]
del a[::2]
print(a)

浅复制,是指生成一个新的列表,并且把原列表中的所有元素的引用都复制到这个新列表中

alist = [3, 5, 7]
blist = alist # 列表b与列表a指向同一块内存
print(id(alist)) # 19346496
print(id(blist)) # 19346496
blist[1] = 8
print(alist) # [3, 8, 7] 修改其中的一个对象会影响另外的一个对象
print(id(alist))
print(id(blist))
print(alist == blist) # == 是判断两个列表中的元素是否完全一样 True
print(alist is blist) # 判断两个列表是否是同一个对象 True
alist = [3, 5, 7]
blist = alist[::] # 切片 浅复制,产生新的对象
print(blist) # [3, 5, 7]
print(alist == blist) # True
print(alist is blist) # Flase
print(id(alist)) # 76647080
print(id(blist)) #76820272
blist[1] = 8
print(alist) # [3, 5, 7]

结论 切片返回的是列表的元素的浅复制

id() 查看元素的内存
== 判断两个对象中的元素是否完全一样
is 判断两个列表是否是同一个对象

-- coding: utf-8 --

@Time : 2019/11/7 9:56

@Author : Nix Chen

@Email : lethe4ever@163.com

@File : demo14_20191107.py

@Software: PyCharm

元组 tuple

元组属于不可变的序列,一旦创建用任何方法都不能将其修改()表示

a = (1, 2, 3)
print(type(a)) # <class 'tuple'>

一个元素的元组

x = (3)*4
print(type(x)) # <class 'int'>
print(x) # 12
x = (3, )*4
print(type(x)) # <class 'tuple'>
print(x) # (3, 3, 3, 3)

使用tuple函数将其他的序列转换为元组
1.列表转化成元组

from random import randint
a = [randint(-10, 10) for _ in range(10)]
print(a) #[10, 2, -9, -3, 2, 1, 0, 7, 7, -7]

a_tuple =tuple(a)
print(a_tuple) # (10, 2, -9, -3, 2, 1, 0, 7, 7, -7)

2.range函数

print(list(range(6))) # [0, 1, 2, 3, 4, 5]
print(tuple(range(6))) # (0, 1, 2, 3, 4, 5)

3.字符串

import string
print(string.ascii_lowercase[:7]) # abcdefg
t = tuple(string.ascii_lowercase[:7]) # ('a', 'b', 'c', 'd', 'e', 'f', 'g')
print(t)
l= list(string.ascii_lowercase[:7]) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(l)

元组和列表的区别
1.元组中的数据一旦定义就不允许修改了

  • 2.元组中没有 append(), extend(), insert()等方法,不能向元组中添加元素*
    3.元组中也没有删除的相关方法,不能从元组中删除元素
    4.从效果上看,tuple函数是冻结列表,list函数是融化列表

元组的优点
元组的速度比列表块
元组对数据进项'写保护',让代码更加安全
元组可以用做字典的键,还可以作为函数的返回值返回()

-- coding: utf-8 --

@Time : 2019/11/7 10:18

@Author : Nix Chen

@Email : lethe4ever@163.com

@File : demo15_20191107.py

@Software: PyCharm

字符串

字符串的切片

import string
letters = string.ascii_uppercase[:9]
print(letters) # ABCDEFGHI
print(letters[3]) # D
print(letters[2:4]) # CD
print(letters[:]) # ABCDEFGHI
print(letters[-2:]) # HI
print('letters[-2:2]', letters[-2:2]) # letters[-2:2]
print(letters[::-1]) # IHGFEDCBA

字符串常用操作方法
1.upper()..lower() 常用指数***

s1 = 'www.NEUEDU.com'
print(s1.upper()) # WWW.NEUEDU.COM
print(s1.lower()) # www.neuedu.com

2.startswith()..s1.endswith() 常用指数***

s1 = 'www.www.NEUEDU.com'
print(s1.startswith('www')) # 判断是否以prefix开头 True
print(s1.startswith('www', 4, 6)) # 左闭右开 False
print(s1.endswith('com')) # True

3.查找元素 find() index()
获取制定元素首次出现的下标

s1 = 'www.wwwNEUEDU.com'
print(s1.find('N')) # 7
print(s1.index('N')) # 7
print(s1.find('F')) # -1
# print(s1.index('F')) # index 找不到这个字符串会报错

print(s1.rfind('w')) # 6 获取指定元素首次出现的下标,只不过是从右面开始
print(s1.rindex('w')) # 6

4.strip 默认取出字符前后两端的空格,换行符,tab 常用指数 *****
rstrip() lsrip()

s1 = '  \n www.NEUEDU.com \t    '
print(len(s1)) # 24
print(len(s1.strip())) # 14
s2 = 'aabbccddff'
s2 = s2.strip('aa')
print(s2) # bbccddff
s2 = s2.rstrip('ff') # 指定为右端
print(s2) # bbccdd
s2 = s2.lstrip('ff') # 指定为左端
print(s2) # 不做任何改变

5.split() 把字符串分割成列表,默认是以空格进行分割 常用指数*****

s1 = 'life is short, use Python'
print(s1.split()) # ['life', 'is', 'short,', 'use', 'Python'] 默认以空格分割
print(s1.split(',')) # ['life is short', ' use Python']

s1 = 'life; is; short,; use; Python'
print(s1.split(';', 3)) # ['life', ' is', ' short,', ' use; Python']
print(s1.split(';', 1)) # 指定分隔多少个 ['life', ' is; short,; use; Python']
print(s1.split(';',3)[3]) # use; Python

splitlines()

s2 = 'wwNEUw.\nwwwNEUEDU.com' # 按照行分隔,返回包含按照各行分隔为元素的列表
s2.rsplit()
s2.lstrip()
s2 = s2.splitlines()
print(s2)

6.join 把列表换成字符串 常用指数*****

s1 = 'life is short, use Python'
l1 = s1.split()
print(l1) # ['life', 'is', 'short,', 'use', 'Python'] # l1里面的元素全是字符串
s2 = ''.join(l1)
print(s2) # lifeisshort,usePython
s2 = ' '.join(l1)
print(s2) # life is short, use Python
s2 = '_'.join(l1)
print(s2) # life_is_short,_use_Python
s2 = '/'.join(l1)
print(s2) # life/is/short,/use/Python
s2 = '\\'.join(l1)
print(s2) # life\is\short,\use\Python

7.is系列 常用指数***

name = 'Neusoft123'
print(name.isalnum()) # 所有字符串是否都为数字或者字母 True
print(name.isdigit()) # 所有字符串是否都为数字 False
print(name.isalpha()) # 所有字符串是否都为字母 False
print(name.islower()) # 所有字符串是否都为小写 False
print(name.isupper()) # 所有字符串是否都为大写 False
print(name.istitle()) # 所有字符串是否都为首字母大写 True
print(name.isspace()) # 所有字符串是否都为空白 False

8.count 计算某个字符出现的次数 常用指数***

name = 'Neusoft1233'
print(name.count('3')) # 2

9.replace 常用指数***** 替换指定的字符

name = 'Neusoft1233'
name = name.replace('1233','')
print(name) # Neusoft
name = '1233Neusoft1233'
name = name.replace('1233','',1)
print(name) # Neusoft1233

10.首字母大写 常用指数**

name = 'neusoft1233'
print(name.capitalize()) # Neusoft1233

11.center 将字符串居中 常用指数*
参数可以设置字符串的总长度,可以使用*进行填充

name = 'neusoft1233'
print(name.center(100,'*')) # ********************************************neusoft1233*********************************************
print(len(name.center(100,'*'))) # 100

ljust

s1 = 'neuedu'
print(len(s1)) # 6
print(s1.ljust(20))
print(s1.rjust(20))
print(len(s1.ljust(20))) #20
print(s1.ljust(20,'*'))

12.title 非字母隔开的每个单词的首字母大写 常用指数*

s = 'chen wuang4fhsa$.f'
print(s.title()) # Chen Wuang4Fhsa$.F

13.partition 将字符串分割成三部分

s1 = 'wwNEUw.www.NEUEDU.com'
print(s1.partition('NEU')) # 返回的是元组 ('ww', 'NEU', 'w.www.NEUEDU.com')
print(s1.rpartition('NEU')) # ('wwNEUw.www.', 'NEU', 'EDU.com')

-- coding: utf-8 --

@Time : 2019/11/7 14:24

@Author : Nix Chen

@Email : lethe4ever@163.com

@File : demo16_20191107.py

@Software: PyCharm

字典 包含若干键值的无需可变的序列,字典中的键可以为任意的不可变的数据 比如number,string,tuple

创建字典

d = {'server': 'db.neuedu.com', 'database': 'oracle'}
print(type(d)) # <class 'dict'>
print(d) # {'server': 'db.neuedu.com', 'database': 'oracle'}

空字典

d1 = {} # [] 空列表 () 不是空元组
d2 = dict()
print('d2', d2) # d2 {}
print(type(d1)) # <class 'dict'>

使用dict函数将已有数据转化成字典
1.两个列表

import string

keys = [x for x in string.ascii_lowercase[:5]]
print(keys) # ['a', 'b', 'c', 'd', 'e']
values = [i for i in range(1, 6)]
print(values) # [1, 2, 3, 4, 5]
print(dict(zip(keys, values))) # {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

2.使用dict()根据给定的键值创建

d3 = dict(name='wunan', age=18, gender= 'female')
print('d3',d3) # d3 {'name': 'wunan', 'age': 18, 'gender': 'female'}

3.根据给定的内容为键,创建值为空的字典

print(dict.fromkeys(['name', 'age', 'gender'])) # {'name': None, 'age': None, 'gender': None}

字典的读取
字典名的['键']

print(d3['name']) # wunan
# print(d3['addr']) # 以键作为下标读取字典元素,不存在这个键就会抛出异常

解决办法: 使用字典的get方法获取指定键对应的值, 并且可以为不存在的键指定默认值

print(d3.get('name')) # wunan
print(d3.get('addr')) # None
print(d3.get('addr', '内蒙古通辽')) # 内蒙古通辽

获取字典所有的键 返回包含这个字典所有键的列表

print(list(d3.keys())) # ['name', 'age', 'gender']

获取字典所有的值 返回包含这个字典所有值的列表

print(list(d3.values())) # ['wunan', 18, 'female']

获取字典所有的键值 返回包含这个字典所有键值的列表

l3 = list(d3.items())
print(list(d3.items())) # [('name', 'wunan'), ('age', 18), ('gender', 'female')]
d4 = dict(l3)
print(d4) # {'name': 'wunan', 'age': 18, 'gender': 'female'}

字典的修改

print('d3',d3) # d3 {'name': 'wunan', 'age': 18, 'gender': 'female'}
# 字典名['键'] = '新的值'
d3['gender'] = 'male'
print(d3) # {'name': 'wunan', 'age': 18, 'gender': 'male'}

字典的添加

字典名['字典中不存在的键' ] = '新的值'
当字典中存在这个键 就是修改操作
当字典中不存在这个键 就是添加操作

d3['addr'] = '沈阳市浑南区新秀街'
print(d3) # {'name': 'wunan', 'age': 18, 'gender': 'male', 'addr': '沈阳市浑南区新秀街'}

字典的删除
del 可以删除整个字典,或者其中的指定元素

print(d3)
# del d3 # 字典完全被删除
# print(d3) # 报错

根据键删除整个元素

del d3['addr']
print(d3) # {'name': 'wunan', 'age': 18, 'gender': 'male'}

清除字典的所有数据

d3.clear()
print(d3) # {}

3. .pop() 删除指定键所对应的值,返回整个值并且从字典中把它删除

ret = d3.pop('addr')
print(ret) # 沈阳市浑南区新秀街
print(d3) # {'name': 'wunan', 'age': 18, 'gender': 'male'}

按照后进先出的顺序,删除字典的最后的键值对,并无返回值

d3.popitem() # {'name': 'wunan', 'age': 18}
print(d3)
d3.popitem()
print(d3) # {'name': 'wunan'}
d3.popitem()
print(d3) # {}

判断一个key 是否在字典中

print('name' in d3.keys()) # True
print('name' in d3) # True

字典的遍历
遍历所有的键

for key in d3.keys():
    print(key)
for value in d3.values():
    print(value)
for kv in d3.items():
    print(kv) # 元组

遍历所有的键值

for k, v in d3.items():
    print(k, '---->', v)

-- coding: utf-8 --

@Time : 2019/11/7 15:20

@Author : Nix Chen

@Email : lethe4ever@163.com

@File : demo17_20191107.py

@Software: PyCharm

有序字典 可以使用collection模块的

from collections import OrderedDict

创建一个无序字典

x = {}
x['b'] = 3
x['a'] = 1
x['c'] = 5
print(x) # {'b': 3, 'a': 1, 'c': 5}
x = OrderedDict()
x['b'] = 3
x['a'] = 1
x['c'] = 5
print(dict(x)) # {'b': 3, 'a': 1, 'c': 5}

字典推导式 (字典解析)

[i for i in range(10)]
{k: v for 临时变量 in 可迭代对象 if 条件}
from random import randint
{'student1':90,'student2':90,'student3':90} 20名 学生
l1 = [randint(0,100) for x in range(1,21)]
grade = {'student{}'.format(x):randint(0, 100) for x in range(1,21)}
print(l1)
print(grade)

使用字典解析筛选 大于60分成绩的学生

jige = {}
for k,v in grade.items():
    if v > 60:
        jige[k] = v
print(jige)

jige = {k:v for k,v in grade.items() if v>60}
print(jige)

-- coding: utf-8 --

@Time : 2019/11/7 16:21

@Author : Nix Chen

@Email : lethe4ever@163.com

@File : demo18_20191107.py

@Software: PyCharm

集合

无序不重复
只能包含不可变数据(数字,字符串,元组)
创建

a = {3,6,9}
print(type(a)) # <class 'set'>
print(a) # {9, 3, 6} 随机顺序

添加

a.add('8') # 数字,字符串,元组
print(a) # {9, 3, 6, '8'}

将其他类型数据转化为集合

a = set(range(10))
print(a)
c = set([i for i in range(25)])
print(c)
# del c
# print(c) # name 'c' is not defined

update方法

d ={1, 2, 4}
d.update({5, 7, 4})
print(d) # {1, 2, 4, 5, 7}

pop() 弹出并删除第一个元素

v =d.pop()
print(v) # 1
print(d) # {2, 4, 5, 7}

删除指定元素的值

d.remove(5)
print(d) # {2, 4, 7}

清空集合

d.clear()
print(d) # set(), {}

使用集合快速提取序列中单一元素

from random import choice
# 随机选取序列中的一个元素
print(choice(['a', 'b', 'c'])) # c
print(choice('dwfjio')) # d
random_list = [choice(range(100)) for _ in range(200)]
print(random_list) # [49, 12, 97, 4, 5, 49, 86, 41, 82, 39, 17, 13, 36, 58, 32, 38, 67, 82, 20, 18, 70, 87, 30, 68, 38, 52, 42, 17, 25, 24, 88, 67, 67, 34, 71, 12, 44, 35, 62, 16, 67, 41, 57, 23, 24, 60, 63, 98, 0, 52, 44, 37, 25, 84, 65, 2, 1, 0, 50, 49, 23, 56, 96, 14, 37, 60, 96, 7, 53, 69, 90, 8, 81, 61, 81, 18, 22, 43, 35, 59, 55, 83, 26, 18, 57, 58, 45, 1, 87, 81, 2, 87, 15, 23, 58, 46, 58, 32, 9, 86, 68, 65, 69, 55, 55, 28, 69, 16, 62, 32, 61, 66, 37, 63, 80, 94, 69, 5, 7, 39, 85, 58, 97, 57, 96, 2, 14, 96, 91, 55, 53, 87, 98, 13, 27, 92, 75, 0, 13, 12, 71, 24, 77, 99, 44, 18, 47, 17, 18, 61, 97, 10, 3, 66, 70, 63, 46, 5, 48, 29, 56, 12, 84, 1, 77, 99, 28, 45, 91, 10, 5, 0, 98, 33, 60, 42, 26, 89, 39, 97, 20, 95, 3, 3, 39, 4, 36, 31, 40, 61, 34, 98, 83, 10, 66, 4, 27, 52, 87, 98]

print((len(random_list))) # 200
# 生成一个norepeat的集合
noRepeat = []
for x in random_list:
    noRepeat.append(x)
print(len(noRepeat)) # 200
noRepeat = set(noRepeat) 
print(noRepeat) # {0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 75, 77, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99}

.union, .intersection, .difference

集合的解析
将列表转化为集合,并且做每个元素两端去空格处理

s = ['     ddd', '  is', '    python']
print({x.strip() for x in s }) # {'ddd', 'python', 'is'}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容