嵌套列表&列表切片&列表推导式

一、列表使用【重点掌握】

1.列表嵌套

列表的嵌套,其实就是一个列表中的元素又是一个列表

注意:操作嵌套列表,只要把要操作元素的下标当作变量名来使用即可

# 1.一维列表
list1 = [23,5,6,7,7]
print(list1[1])
for n1 in list1:
    print(n1)


# 2.二维列表
list2 = [[2,3,4],[True,False],["abc",4,6,7]]
print(list2[1])
print(list2[1][0])

"""
工作原理:
    list2中存储了三个小列表的地址
    三个小列表中又分别存储了不同数据的地址
"""

# 二维列表的遍历
# 方式一
for sublist in list2:
    for ele in sublist:
        print(ele)


# 方式二
for i in range(len(list2)):
    for j in range(len(list2[i])):
        print(list2[i][j])
2.列表切片
"""
【面试题】什么是切片,请举例说明


切片:根据指定的区间,指定的步长,在列表,元组或字符串等有序集合中进行截取,形成一个新的列表,元组或字符串

语法:列表名[start:end:step]
    start:开始索引,可以省略,默认为0,不省略的情况下包含在内
    end:结束索引,可以省略,默认为索引的结束【len - 1  或 -len】,不省略的情况下不包含在内
    step:表示步长,可以省略,默认为1

索引:
    0   1   2   3   4   5   6   7   8
  -9   -8  -7  -6  -5  -4  -3  -2   -1

注意:切片之后会得到一个新的列表,对原列表没有任何影响
"""
list1 = [11,22,33,44,55,66,77,88,99]


# 一、一般情况
# 1.省略step
print(list1[1:4])  # [22, 33, 44]
print(list1[1:4:1]) # [22, 33, 44]

print("*" * 30)

# 2.省略start
print(list1[:4])  # [11,22,33,44]
print(list1[:4:1])

print("*" * 30)

# 3.省略end
print(list1[1:])  # [22, 33, 44, 55, 66, 77, 88, 99]
print(list1[1::1])  # [22, 33, 44, 55, 66, 77, 88, 99]
print(list1[1:8])  # [22, 33, 44, 55, 66, 77, 88]

# 注意:start不管是否省略,都包含在内,但是,end如果不省略,则不包含,省略则包含在内

print("*" * 30)

list1 = [11,22,33,44,55,66,77,88,99]

# 4.start和end都是正数
"""
结论1:

如果start和end同符号,则可以采用如下规律判断
    a.计算start + step的结果
    b.判断上述结果是否在start和end区间内
    c.如果不在区间内,则结果直接为[],如果存在,则依次计算
"""
print(list1[1:6:2])   # [22,44,66]
print(list1[1:6:-1])  # []

print(list1[6:1:1])   # []
print(list1[6:1:-1])  # [77, 66, 55, 44, 33]

print("*" * 30)

list1 = [11,22,33,44,55,66,77,88,99]

# 5.start和end都是负数
print(list1[-1:-6:1])   # []
print(list1[-1:-6:-1])  # [99,88,77,66,55]

print(list1[-6:-1:1])   # [44,55,66,77,88]
print(list1[-6:-1:-1])  # []

print("*" * 30)


# 6.start和end一个为正数,一个为负数
"""
结论2:如果start和end一个为正数,一个为负数,则判断的索引以start的正负作为参考
"""
"""
索引:
    0   1   2   3   4   5   6   7   8
   -9  -8  -7  -6  -5  -4  -3  -2   -1
"""
list1 = [11,22,33,44,55,66,77,88,99]

print(list1[1:-6:1])   # [1:-6:1]---》[1:3:1]---》[22,33]
print(list1[1:-6:-1])  # [1:-6:-1]--->[1:3:-1]--->[]

print(list1[-1:6:1])   # [-1:6:1]----》[-1:-3:1]---》[]
print(list1[-1:6:-1])  # [-1:6:-1]--->[-1:-3:-1]----》[99,88]


print(list1[-5:6:1])  # [-5:6:1]----》[-5:-3:1]---》[55,66]

print("*" * 30)


# 二、特殊情况
# 1
# print(list1[100])   # IndexError
print(list1[100:])   # []


# 2.
print(list1[0:-1])   # [11, 22, 33, 44, 55, 66, 77, 88]
print(list1[0:8])    # [11, 22, 33, 44, 55, 66, 77, 88]


# 3.
print(list1[4:100])  # [55, 66, 77, 88, 99]
print(list1[4:])     # [55, 66, 77, 88, 99]


# 4.
print(list1[::1])  # 拷贝,顺序获取  [11, 22, 33, 44, 55, 66, 77, 88, 99]
print(list1[0:9:1])

print(list1[::-1])  # 逆序获取    [99, 88, 77, 66, 55, 44, 33, 22, 11]
print(list1[-1:-10:-1])


# 5.
print(list1[-1:0])   # [-1:-9:1]---->[]
print(list1[-1:0:-1])   # [-1:-9:-1]---->[99,88,.....22]


# 6.
"""
结论3:start和step未省略,end省略,step为正数,则向右获取,step为负数,向左获取
"""
print(list1[-6::1])   # [44, 55, 66, 77, 88, 99]
print(list1[-6::-1])  # [44, 33, 22, 11]

print(list1[6::1])   # [77, 88, 99]
print(list1[6::-1])  # [77, 66, 55, 44, 33, 22, 11]

print(list1[0::1])   # [11, 22, 33, 44, 55, 66, 77, 88, 99]
print(list1[0::-1])   # [11]

二、列表推导式【重点掌握】

列表推导式,就是指的轻量级循环创建列表

# 列表推导式/列表生成式:是Python提供的用于创建一个列表的快捷方式
# 语法:[新列表中元素的规律  for循环  if语句]
# 执行顺序:for循环----》if语句【可省略】----》元素规律


# 1.需求:生成一个列表[2,4,6,8,10]
# 方式一
list1 = list(range(2,11,2))
print(list1)

# 方式二
new_list1 = []
for i in range(1,6):
    new_list1.append(i * 2)
print(new_list1)

# 方式三                   *******
new_list2 = [i * 2 for i in range(1,6)]
print(new_list2)
print(type(new_list2))

# 练习:生成一个列表[1,4,9,16,25]
new_list3 = [pow(i,2) for i in range(1,6)]
print(new_list3)


# 2.生成一个列表[1,9,25,49,81]
new_list21 = [i ** 2 for i in range(1,10,2)]
print(new_list21)


new_list22 = [i ** 2 for i in range(1,10) if i % 2 == 1]
print(new_list22)


# 练习:生成一个列表,其中的元素是1~30之间3的倍数
new_list23 = [i for i in range(1,31) if i % 3 == 0]
print(new_list23)

new_list23 = [i * 3 for i in range(1,11)]
print(new_list23)

# 3.在列表推导式中可以书写多个for或if,相当于嵌套,从左往右是依次嵌套的关系
list31 = []
for a in "abc":
    for b in "xyz":
        list31.append(a + b)
print(list31)

list32 = [a + b for a in "abc" for b in "xyz"]
print(list32)


list33 = [i for i in range(1,31) if i % 3 == 0 if i % 6 == 0]
print(list33)

# 练习:已知列表[3,5,6,7,"abc",56,True,"gagha"],将其中的数字元素提取出来,生成一个新的列表
list1 = [3,5,6,7,"abc",56,True,"gagha"]
list41 = [ele for ele in list1 if type(ele) == int]
print(list41)

# isinstance(变量,类型):判断一个变量的类型是否是指定类型
list42 = [ele for ele in list1 if isinstance(ele,int)]
print(list42)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值