Python基础学习——列表详解

Python基础学习——列表详解

1. 列表的生成和遍历

1.1 列表的定义
  • 列表的生成语法
# 定义一个空列表
list1=[]
# 构造器方法
list2=list()
# 字面量方法
list3=['tian''yu''平']
# 列表生成式方法(推导式方法)
nums=[i for i in range(10)]

在构建列表时常选用列表生成式方法来提高效能

2.2 遍历列表
  • 直接打印
l=[1,2,3]
print(l)
  • 遍历列表的方法
# 方法1
for i in range(len(list2)):
    print(list2[i],end=' ')

# 方法2
for x in list2:
    print(x,end=' ')

# 方法3
for i,x in enumerate(list2):
    print(i,x,end=' ')

常用方法3,既可以得到列表的元素,又可以获取下标。

3.3 列表的索引和切片
  • 列表的索引,index————[::]—>开始索引(默认为0):结束索引(默认为列表长度):步长(默认为1)
  • 注意列表的索引从0开始
  • 列表索引包括正向索引和负向索引
# 构造列表
nums=[i for i in range(10)] 
print(nums)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 索引获取元素
print(nums[2]) # nums列表中的第三个元素—————>2
# 索引支持从后往前取
print(nums[-1]) # nums列表中的最后一个元素——————>9

# 切片获取元素
print(nums[:]) # 获取列表中所有元素
print(nums[1:]) # 获取从第2个元素到最后一个元素
print(nums[::-1]) # 实现逆转
  • ord():查看字符对应编码

  • chr():将编码处理成对应字符

由于篇幅问题,其它情况就不一一列出,还需多加练习列表的切片和索引取获取元素

2. 列表的常用方法

2.1 插入元素方法
  • 插入元素的方法:append()追加元素、insert()插入元素
list1=[1,2,3]
list1.append(4)
# 在列表指定位置插入元素
list1.insert(2,6)
2.2 删除元素方法
  • 删除元素的方法:remove()、clear()清空元素
list1=[1134]
# 默认删除最后一个
list1.pop()
# 删除指定元素
list1.remove(1) #默认删除第1个
list1.clear()# 直接清空元素
2.3 查看元素是否存在返回索引
# 查找元素是否存在,返回索引
list=['tian', 'yu', 'ping']
num=list.index('tian') # 如果该元素不存在会出现 “ValueError: 'tia' is not in list”错误
print(num)
# 防止出现报错,解决如下:
if 'tian' in list:
    print(list.index('yu'))
# 统计某个元素在列表中出现的次数
print(list.count('yu'))
2.3 对列表元素排序、反转和统计元素个数
  • 列表元素反转
list1=['tian', 'yu', 'ping']
list1.reverse()
print(list1)
  • 列表元素排序
list2=[1,23,4,5]
# reverse=True-->降序
list2.sort(reverse=True)
print(list2)
  • 统计某个元素出现的个数
list1=[1,3,3,32,3]
print(list1.count(3)) # 3

3. 列表的运算

  • 重复运算
l=[0]*10 # 对列表重复10次
  • 比较运算,从左到右,当到某个元素以经比较出结果就不在继续下去
list1=[1,2,3,4]
list2=[1,2,3,4,5]
# 列表扩展/合并
list3=list1+list2
# 返回值要么为False,要么为True
print(list1 == list2) # False
print(list1 >= list2) # False
print(list1 <= list2) # True
  • 注意字符串列表和数字列表的比较
list1 = [1, 2, 3, 4]
list2 = ['1','2','3','5']
# print(list1 <= list2) # TypeError: '<=' not supported between instances of 'int' and 'str'
list2=[int(i) for i in list2]
print(list1 <= list2) # True

4. 用于列表的排序算法

4.1 简单选择排序
# 简单选择排序
nums = [1, 23, 54, 34, 42]

for i in range(len(nums) - 1):
    min_value, min_index = nums[i], i
    for j in range(i + 1, len(nums)):
        if nums[j] < min_value:
            min_value, min_index = nums[j], j
    nums[i], nums[min_index] = nums[min_index], nums[i]
print(nums)
4.2 冒泡排序
# 冒泡排序
nums = [1, 23, 54, 34, 42]
for i in range(1, len(nums)):
   
    for j in range(len(nums) - i):
        if nums[j] > nums[j + 1]:
            nums[j + 1], nums[j] = nums[j], nums[j + 1]
         
4.3 改进版冒泡排序
nums = [1, 23, 54, 34, 42]
for i in range(1, len(nums)):
    swapped = False # 标识是否发生交换,如果不发生交换就可以认为已经有序
    for j in range(len(nums) - i):
        if nums[j] > nums[j + 1]:
            nums[j + 1], nums[j] = nums[j], nums[j + 1]
            swapped = True
    if not swapped: # 没有交换就终止循环
        break

5. 列表经典编程题的应用

5.1 幸运的女人

30个人,其中15个男人15个女人坐船出海,结果船坏了。需要把其中15个人扔到海里,其他人才能够存活下来;所有人围成一圈,有某个人开始
报数,报到9的就被扔下海里,接着从1开始报数,直到将15个人仍下海。最后,15个女人都存活下来,15个男人被仍下海。
问原先那些位置是男人,那些位置是女人?

  • 方法1
persons = [True] * 30
# print(persons)
# index:获取persons索引  counter:计数扔掉人数   number:实现报数
index, counter, number = 0, 0, 0
while counter < 15:
    if persons[index]:
        number += 1
        if number == 9:
            persons[index] = False
            counter += 1
            number = 0
    index += 1
    if index == 30:
        index = 0
for person in persons:
    # 三元运算
    print('女' if person else '男', end=' ')

print('\n','*'*100)

  • 方法2
persons=[i for i in range(1,31)]
for _ in range(15):
    persons=persons[9:]+persons[0:8]
for i in range(1,31):
    print('女' if i in persons else '男',end=' ')
5.2 扑克牌游戏发牌模拟

用一个列表保存54张扑克牌,洗牌,按斗地主的发牌方式把牌发给三个玩家,
多的3张牌给第一个玩家(地主),把每个玩家手上的牌显示出来。

import random
nums=[i for i in range(2,11) ]
others=['J','Q','K','A']
colors=['黑桃','红桃','方块','梅花']
cards=[str(i)+j for i in range(2,11) for j in colors]+[i+j for i in others for j in colors]
cards=cards+['B','S']
print(len(cards))
# print(cards)
# print(len(cards))
random.shuffle(cards)
# print(cards)
user1_game=[]
user2_game=[]
user3_game=[]
for i in range(0,len(cards)-3,3):
    user1_game.append(cards[i])
    user2_game.append(cards[i+1])
    user3_game.append(cards[i+2])
user1_game=user1_game+cards[-1:-4:-1]
print('第一个玩家的牌:\n',user1_game)
print('第二个玩家的牌:\n',user2_game)
print('第三个玩家的牌:\n',user3_game)

6. 列表中的统计学

注意以下函数都是基于random库下

  • sample()函数可以实现对列表元素无放回抽样
import  random
persons=['lihua','wangliang','beijing','jinghai','longlue','lisan']
person=random.sample(persons,3)
print(person)
  • choices()函数可以对列表元素有放回抽样(可以重复抽中)---->返回一个列表
import  random
persons=['lihua','wangliang','beijing','jinghai','longlue','lisan']
for _ in range(2):
    person=random.choices(persons,k=2) # 必须指定k的值
    print(person)
# ['longlue', 'longlue']
# ['beijing', 'jinghai']
  • choice()函数可以从列表中随机选取一个元素
import  random
persons=['lihua','wangliang','beijing','jinghai','longlue','lisan']
person=random.choice(persons)
print(person) # wangliang
  • shuffle()函数可以实现列表元素随机乱序
import  random
persons=['lihua','wangliang','beijing','jinghai','longlue','lisan']
random.shuffle(persons)
print(persons)
# ['jinghai', 'lisan', 'wangliang', 'longlue', 'beijing', 'lihua']

7. 总结

通过列表的学习,基本上能够解决一些基本的 问题,但列表的运用是非常灵活的同时应用场景也十分广泛。列表这里要通过大量的练习来巩固编程思想,后期很多算法都是基于列表的数据结构。

语录

学习的过程是可能需要付出很多心血, 但坚持是成为一个优秀数据分析师必然要经历的过程。
数据分析的学习之路, 并不是学的越多越好, 而是要将学习的方向明确好, 再使正确的力, 这样才可以在正确的方向 做正确的事。
码字不易, 求个赞哈!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值