Day7 List(列表)

1 字符的对象方法

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

print('abshabcjababca'.count('abc'))

1.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) -> 指定范围中进行查找
str1 = 'how are you!fine,and you'
print(str1.find('you', 10, 15))

1.3 字符串.join(序列) - 将序列中元素取出来,中间用指定字符串拼接在一起产生一个新的字符串

new_str = '*'.join('abc')
print(new_str)   # a*b*c
print('++'.join(['abc', 'bb', '王者'])) # abc++bb++王者

1.4 max和min max(序列), min(序列)

print(max('ajsfddfgs李asf')) # 李
print(min('ahsjfkaferesajf'))# a
print(max(range(100)))  # 99

1.5 字符串.replace(old,new) - 将字符串中指定的旧字符串全部替换成新的字符串

字符串.replace(old,new,替换次数)

str1 = 'how are you! fine,and you'
new_str = str1.replace('y', 'me', 1) #1代表替换1次
print(new_str) #how are meou! fine,and you

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

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

2 列表(list)

2.1 列表概述

  • 列表是python提供的容器型数据类型(序列), 可变、有序
    • 可变(元素的个数、值和顺序可变) - 支持增删改
    • 有序 - 支持下标操作
  • 列表数据: [元素1, 元素2, 元素3,...]
    • 元素可以是任何类型的数据(值、赋值后的变量、除了赋值符以外的其他运算表达式)
    • 不同的元素的类型可以不一样
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)

2.2.列表元素的操作

2.2.1 查 - 获取列表中的元素

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

    • 注意: 下标不能越界

names = ['路飞', '鸣人', '佐助', '索罗', 100]
print(names[-1], type(names[-1])) # 100 

print(names[10])   # IndexError: list index out of range 下标越界
  • 获取部分元素(切片) - 结果是列表
    列表[开始下标:结束下标:步长]
names = ['路飞', '鸣人', '佐助', '索罗', 100]
print(names[1:-1])  # ['鸣人', '佐助', '索罗']
list2 = names[-1:1] 
print(list2)   # [] 步长为1 开始下标大于结束下标 则返回空列表

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

print(names[:3:-1])  # [100]步长为负,则开始在最右端

print(names[:])  # ['路飞', '鸣人', '佐助', '索罗', 100] 深拷贝 
print(names[::-1])  # 逆序 [100, '索罗', '佐助', '鸣人', '路飞']

遍历列表

  • 直接遍历元素
names = ['路飞', '鸣人', '佐助', '索罗', 100]
for name in names:
    print(name)
  • 遍历下标
names = ['路飞', '鸣人', '佐助', '索罗', 100]
for index in range(len(names)):
    print(names[index])
  • isinstance函数
    isinstance(数据, 类型) - 判断指定的数据是否是指定的类型 返回布尔值

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

list3 = [1, 34, "dhj", 345]
count = 0
for item in list3:
    if isinstance(item, int) == True: # True可以省略
        count += 1
print(count)

2.2.2 增 - 添加元素

  • 列表.append(元素) - 在列表的最后添加一个元素(修改原列表,不会产生新的列表)
films = ['复联4', '指环王', '绿皮书', '你的名字', '千与千寻']
films.append('肖生克的救赎') #注意在原先列表上操作,如果前加list2 = 打印是none
print(films)
  • 列表.insert(下标, 元素) - 在列表中指定下标前添加指定元素
films.insert(2, '沉默的羔羊')
print(films)
  • 练习1: 有一个有序的数字列表,输入一个数,将这个插入到列表中,要求插入后不改变排列方式
numbers = [1, 8, 12, 30, 45]
num =  int(input("请输入数字"))

for index in range(len(numbers)):
    if numbers[index] > num:
        numbers.insert(index, num)
        break
else:
    numbers.insert(len(numbers) , num)
print(numbers)

2.2.3 删 - 删除列表中的元素

  • del 列表[下标] - 删除列表中指定下标对应的元素 下标不能越界
numbers = [1, 8, 12, 30, 45]
del numbers[1]
print(numbers)

del films[100]   # IndexError: list assignment index out of range
  • 列表.remove(元素) - 删除列表中指定的元素
    • 如果需要删除的元素在列表中有多个,只删最前面的一个
    • 如果要删除的元素不存在,程序会报错!
films = ['复联4', '指环王', '沉默的羔羊', '绿皮书', '你的名字', '千与千寻', '肖生克的救赎', '指环王']

films.remove('指环王2')   # ValueError: list.remove(x): x not in list
films.remove('指环王')
print(films)
  • 列表.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, 67, 30, 100]   
for index in range(len(scores)-1, -1, -1):
    if scores[index] < 60:
        del scores[index]
print(scores)
  • 解决下标越界:使用while循环控制下标在不删除的时候才增加1,删除的时候不变
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)
scores = [90, 80, 70, 100, 76, 57, 54, 34, 57, 87, 56, 67, 34]
index = 0
while index 
  • 解决删除后因长度改变删除不完全:直接获取列表元素
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]
for score in scores[:]: #[:]深拷贝 长度不变
    if score < 60:
        scores.remove(score)

print(scores)

2.2.4 改 - 修改元素的值

  • 列表[下标] = 新值 - 修改指定下标对应的元素为新值
  • 注意: 下标不能越界!
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)

2.3 列表运算符

2.3.1 数学运算: +, *

  • 列表1+列表2 -> 将两个列表中的元素合并产生一个新的列表
list1 = [43,65,76,6]
list2 = [45,77,90,11,2,4,66]
print(list1 + list2)  #[43,65,76,6,45,77,90,11,2,4,66]  产生一个新列表
  • 列表1 * N -> 列表中的元素重复N次产生一个新的列表
print(list1 * 2)  # [43,65,76,6,43,65,76,6]

2.3.2 比较运算: ==, != 返回布尔值

print([1, 2, 3] == [1, 3, 2])
print([1, 2, 3] == [1, 2, 3])

2.4 列表操作方法

  • 元素 in 列表 -> 判断列表中是否包含指定的元素
print([1, 2] in [1, 2, 3, 4, [1, 2]])  # True
print([1, 2] in [1, 2, 3, 4])  # False
print(1 in [[1], 2, 3])  # False
print(1 in [1, 2, 3])  # True
  • len(列表) -> 获取列表中元素的个数

  • list(数据) -> 将指定数据转换成列表
    所有的序列都可以转换成列表; 将序列中的元素作为列表元素

print(list(100))   # TypeError: 'int' object is not iterable
print(list('hello python!'))
print(list(range(20, 39)))
  • max/min
    • max(列表) - 获取列表中元素的最大值
    • min(列表) - 获取列表中元素的最小值
      注意:
  • 列表中元素的类型必须一致
  • 数据支持比较运算符
print(max([129, 99, 3, -2]))  # 129

你可能感兴趣的:(Day7 List(列表))