day7_列表

前言回顾

1.字符串1.count(字符串2) -> 统计在字符串1中字符串2出现的次数

print('absfhsjdfh'.count('abs'))

2.字符串1.find(字符串2) -> 返回字符串2在字符串1中第一次出现的下标(0~长度-1的下标);找不到返回-1

str1 = 'how are you ! fine,and you'
print(str1.find('you'))

字符串1.find(字符串2, startindex, endindex)  ->  指定范围内查找(找不到返回-1)
print(str1.find('you', 10, 15))

# .index和.find()方法一样,但是找不到程序会有异常

3.字符串.join(序列) - 将序列中元素取出来,中间用指定字符串拼接在一起产生一个新的字符串
!!! 序列必须是字符串,不可以是数字

new_str = '*'.join('abc')
print(new_str)

new_str = ','.join(['name', 'age', 'xiaoming'])  # 注意序列
print(new_str)

4.max(str) 和 min(str)
max(序列),min(序列)

print(max('afkslfzds的sf'))
print(min('dfdsjfdfs'))

5.字符串.replace(old, new) - 将字符串中指定的旧字符串全部替换成新的字符串,默认替换所有的子字符串
字符串.replace(old, new, max) - max为替换次数

str1 = 'how are you ! fine,and you'
new_str = str1.replace('you', 'me')
print(new_str)

6.字符串1.split(字符串2) - 将字符串按照字符串2进行切割,返回的是列表
切割后返回的是一个列表

str1 = 'how are you ! fine,and you'
result = str1. split(' ')
print(result)

字符串.swapcase() - 将字符串中大写转为小写,将小写转为大写
字符串.title() - 将字符串转为title类型(title类型,即为首字母大写,其余小写的标题格式)

列表

1.什么是列表(list)

列表是python提供的容器型数据类型(序列),可变、有序
可变(元素的个数、值和顺序可变) - 支持增删改
有序 - 支持下标操作

2.列表数据:[元素1,元素2,元素3,...]

元素:
1.可以是任何类型的数据(值、赋值后的变量、除了赋值符以外的其他运算表达式)
2.一个列表中可以同时存在多种数据类型

list1 = [10, 12.0, True, 'abc', [1, 2], (1, 2), {'a': 10}, lambda x: x*2]
print(list1)

num = 10
list2 = [num, num*10+2, 'abc'.count('a')]
print(list2)

3.列表元素的操作

3.1 查 - 获取列表中的元素

  1. 获取单个元素
语法:列表[下标]  -  获取列表中指定下标对应的元素(返回值就是对应的元素)

注意:下标不能越界
下标: 0 ~ 长度-1 ;-1 ~ -长度
names = ['路飞', '鸣人', '佐助', '索罗', 100]
print(names[1])
print(names[-1], type(names[-1]))
  1. 获取部分元素(切片) 结果是列表(和字符串类似)
列表[开始下标:结束下标:步长]
print(names[1:-1])  # ['鸣人', '佐助', '索罗']
list2 = names[-1:1]  # []
print(list2)

list2 = names[-1:1:-1]  # [100, '索罗', '佐助']
print(list2)

print(names[:3])  # ['路飞', '鸣人', '佐助']
print(names[:3:-1])  # [100]

# 最常用两种方式
print(names[:])
print(names[::-1])
  1. 遍历
for 变量 in 列表:
    循环体

变量直接取到的是列表中的每个元素
names = ['路飞', '鸣人', '佐助', '索罗']

# 直接遍历元素
for item in names:
    print(item)

# 遍历下标
for index in range(len(names)):
    print(names[index])

补充:isinstance

isinstance(数据, 类型)  -  判断指定的数据是否是指定的类型
print(isinstance(100.0, int))  # False

练习:统计一个列表中整型元素的个数

list3 = [23, 78.2, 'asgs', [12, 3], 290]
count = 0
for item in list3:
    if isinstance(item, int) :
        count += 1
print(count)

列表元素的操作 (都是在原列表的基础上操作的)

1. 增 - 添加元素

  1. 列表.append(元素) - 在列表最后添加一个元素(修改原列表,不会产生新的列表)
films = ['复联4', '指环王', '绿皮书', '你的名字', '千与千寻']
result = films.append('肖生克的救赎')
print(films, result)  # none 表示列表不存在
  1. 列表.insert(下标, 元素) - 在列表中指定下标[前]添加指定元素
films.insert(2, '沉默的羔羊')
print(films)

练习1:有一个有序的数字列表,输入一个数,将这个数插入到列表中,要求插入后不改变排列方式

# [1, 12, 32, 45, 60]
# 输入3:[1, 3, 12, 32, 45, 60]
numbers = [1, 12, 32, 45, 60]
num = int(input('请输入一个数:'))
for index in range(len(numbers)):
    if num < numbers[index]:
        numbers.insert(index, num)
        break
else:
    numbers.append(num)
print(numbers)

2.删 - 删除列表中的元素 (在原列表的基础上操作,不会产生新列表)

  1. del 列表[下标] - 删除列表中指定下标对应的元素
    下标范围 0 ~ 长度-1;-1 ~ -长度 下标不能越界!!
films = ['复联4', '指环王', '绿皮书', '你的名字', '千与千寻']
del films[1]
print(films)

del films[-1]
print(films)

# 下标不能越界
# del films[100]   # IndexError: list assignment index out of range
  1. 列表.remove(元素) - 删除列表中指定的元素
注意:1.如果需要删除的元素在列表中有多个,只删最前面一个
      2.不能删除列表中不存在的元素了,否则程序会报错
films = ['复联4', '指环王', '绿皮书', '指环王', '你的名字', '千与千寻']
# films.remove('指环王2')   # ValueError: list.remove(x): x not in list
films.remove('指环王')
print(films)
  1. 列表.pop()
列表.pop()  -  取出列表中最后一个元素
列表.pop(下标)  -  取出列表中指定下标对应的元素
films = ['复联4', '指环王', '绿皮书', '你的名字', '千与千寻']
del_value = films.pop()
print(films, del_value)

del_value = films.pop(0)
print(films, del_value)

练习:删除列表中成绩所有低于60的成绩

# 错误示例:
scores = [70, 45, 50, 87, 90, 67, 30, 100]
count = 0
for index in range(len(scores)):
    if scores[index-1] < 60:
        del scores[index]
print(scores)
坑1:下标越界
scores = [70, 45, 50, 87, 67, 30, 100]
index = 0 ~ 6
index = 0; 70 < 60
index = 1; 45 < 60; del scores[1]; scores = [70, 50, 87, 67, 30, 100]
index = 2; 87 < 60
index = 3; 67 < 60
index = 4; 30 < 60; del scores[4]; scores = [70, 50, 87, 67, 100]
index = 5; scores[5] -> 越界

解决坑1:下标从后往前取

scores = [70, 45, 50, 87, 67, 30, 100]
index = 6 ~ 0
index = 6; 100 < 60
index = 5; 30 < 60; del scores[5]; scores = [70, 45, 50, 87, 67, 100]
index = 4; 67 < 60;
index = 3; 87 < 87;
index = 2; 50 < 60; del 2; [70, 45, 87, 67, 100]
index = 1; 45 < 60; del 1; [70, 87, 67, 100]
index = 0; 70 < 60
scores = [70, 45, 50, 87, 90, 67, 30, 100]
for index in range(len(scores)-1, -1, -1):
    if scores[index] < 60:
        del scores[index]
print(scores)

解决坑1:使用while循环控制下标在不删除的时候加1,删除的时候不变

[70, 45, 50, 87, 67, 30, 100]
index = 0, 70
index = 1, 45    [70, 50, 87, 90, 67, 30, 100]
index = 1, 50    [70, 87, 90, 67, 30, 100]
index = 1, 87
index = 2, 67
index = 3, 30    [70, 87, 90, 67, 100]
index = 3, 100
scores = [70, 45, 50, 87, 67, 30, 100]
index = 0
while index < len(scores):
    if scores[index] < 60:
        del scores[index]
        continue
    index += 1
print(scores)

坑2:直接获取列表元素

scores = [70, 45, 50, 87, 67, 30, 100]
for score in scores:
    if score < 60:
        scores.remove(score)
print(scores)
scores = [70, 45, 50, 87, 67, 30, 100]
(index = 0 ~ 6)
(0)score = 70
(1)score = 45; 45<60; [70, 50, 87, 67, 30, 100]
(2)score = 87;
(3)score = 67;
(4)score = 30; 30<60; [70, 50, 87, 67, 100]
(5) 异常

解决坑2:

scores = [70, 45, 50, 87, 67, 30, 100]
temp = scores[:]  # 不可以直接赋值,即不可以 temp = scores,不然两者共享相同的存储空间,改变元素会相互影响
for score in temp:
    if score < 60:
        scores.remove(score)
print(scores)

上面可以简写为如下:

scores = [70, 45, 50, 87, 67, 30, 100]
for score in scores[:]:
    if score < 60:
        scores.remove(score)
print(scores)
!!!注意:遍历删除的时候需要考虑这两个坑!

3.改 - 修改元素的值

列表[下标] = 新值 - 修改指定下标对应的元素为新值
!!!注意:下标不能越界

balls = ['乒乓球', '篮球', '足球', '排球']
balls[1] = '羽毛球'
print(balls)

scores = [70, 45, 50, 87, 67, 30, 100]
for index in range(len(scores)):
    if scores[index] < 60:
        scores[index] = '不及格'
print(scores)

1.列表运算符

  1. 数学运算:+,*
    列表1 + 列表2 -> 将两个列表中的元素合并产生一个新的列表
new_list = ['a', 'b', 'c'] + [1, 2, 3]
print(new_list)

列表1 * N -> 列表中的元素重复N次产生一个新的列表

print([1, 2, 3] * 3)
  1. 比较运算:==, != (一般不比较大小,因为没什么意义)
    列表是有序的
print([1, 2, 3] == [1, 3, 2])  # False

集合是无序的

print({1, 2, 3} == {1, 3, 2})  # True

2.in/ not in

元素 in 列表 -> 判断列表中是否包含指定的[元素]

print([1, 2] in [1, 2, 3, 5])  # False
print([1, 2] in [1, 2, 3, 5, [1, 2]])  # True

3.len(列表) -> 获取列表中元素的个数

4.list(数据) -> 将指定数据转换成列表

所有的[序列]都可以转换成列表;将序列中的元素作为列表元素
非序列不可以
# print(list(100))  # TypeError: 'int' object is not iterable
print(list('hello world!'))
print(list(range(20, 39)))

5. max/min

max(列表)  -  获取列表中元素的最大值
min(列表)  -  获取列表中元素的最小值
注意:1.列表中元素的类型必须一致 
      2.数据支持比较运算符
# 错误示例:max([129, 'as', 3, 'ahs'])
print(max([129, 99, 3, -2]))
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • record 用''或者""引起来的字符集2.str - 不可变(不支持增删改)、有序(支持下标语法)3.字符:...
    zlyyL阅读 281评论 0 1
  • 1.格式字符串: 在字符串中通过格式占位符来表示字符串中的变化部分 1.1语法: 包含格式占位符的字符%(给格式占...
    ham731阅读 510评论 0 1
  • 一、认识列表 1.什么是列表是python中的容器类的数据类型,可以用来存储多个数据。可变的,有序的。可变指的是列...
    龙神海王阅读 168评论 0 0
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,302评论 0 9
  • 偶尔的机会,我看到了长投学堂,心想:9元的价格即使没什么收获,我也没什么损失,试试看呗!于是就购买了小白课程。 第...
    微风徐徐00阅读 320评论 0 3