Python基础学习(四)--for循环,列表,深浅拷贝,元组

一、for循环

经常和range()函数一起出现。
range的特点:前闭后开,默认从零开始,默认步长为1
代码段中的range(5)等价于[0,5)

for i in range(5):
    print(i)    # 0 1 2 3 4

for i in range(18,8,-3):
    print(i)    # 18 15 12 9

二、列表

列表是一个可修改的,元素以逗号分隔,以中括号包括的有序序列。

重点:有序,可修改
a=[]    #空列表
b=[1,2]
print(a,type(a))    #[] <class 'list'>
print(b,type(b))    #[1, 2] <class 'list'>

(一)遍历

a=[1,'a','b','c']
print(a[0],a[1],a[2],a[3])

#while循环
i=0
while i<len(a):
    print('第',i+1,'个值为:',a[i])
    i+=1

#for循环
#1
for i in a:
    print('第',i,'个值为:',a[i])
#2
for i in range(len(a)):
    print('第', i, '个值为:', a[i])

(二)拼接,重复

a = [1, 2]
b = [3, 4, 5]
c = a + b
print(c)    #[1, 2, 3, 4, 5]

d = a * 3
print(d)    #[1, 2, 1, 2, 1, 2]

(三)切片

a=[10,20,30,40,50,60,70]
b=a[2:5]
print(b)    #[30, 40, 50]
a=['a','b','c',1,2,3,4,5]
b=a[2:7:2]
print(b)    # ['c', 2, 4]
b=a[2:]
print(b)    # ['c', 1, 2, 3, 4, 5]
b=a[:3]
print(b)    # ['a', 'b', 'c']
print(a)    # ['a', 'b', 'c', 1, 2, 3, 4, 5]
注:切片操作并不影响原列表
[2:5]–> [2,5),同range,前闭后开,默认步长也是1

该代码段实现了列表的逆向输出:

a=['a','b','c']
for i in range(-1,-len(a)-1,-1):
    print(i,':',a[i])

这里涉及到了python中的负下标。python是支持负下标的,-1代表最后一个元素的索引,然后从后向前,依次减1。

(四)使用’*'进行可变初始化

a,b=[1,2]
print('a:',a)    # a: 1
print('b:',b)    # b: 2

a,*b=[1,2,3,4]
print('a:',a)    # a: 1
print('b:',b)    # b: [2, 3, 4]

*a,b=[1,2,3,4,5]
print('a:',a)    # a: [1, 2, 3, 4]
print('b:',b)    # b: 5

(五)增加操作

1.append()方法–在末尾追加
a=[1,2,3,4]
a.append(9)
print(a)    # [1, 2, 3, 4, 9]
2.extend()方法–扩展,与’+‘号产生的结果相同;区别在于它改变原列表,而’+'号不改变
a.extend('b')
print(a)
3.insert()方法–插入,在指定位置插入元素
a=[1,2,3,4]
a.insert(2,'a')
print(a)    # [1, 2, 'a', 3, 4]

(六)删除操作

1.pop()方法–弹出,返回并删除,默认为最后一个,也可指定索引(从右向左)
a=[1,2,3,4]
b=a.pop()
print(b)    # 4
b=a.pop(1)
print(b)    # 2
print(a)    # [1,3]
2.remove()方法–删除第一个参数指定的元素值(从左往右)
a=[1,2,3,4,3,7,6]
a.remove(3)
print(a)    # [1, 2, 4, 3, 7, 6]
3.del 方法–可删除列表中的一个元素,也可删除整个列表(非列表独有)
a=[1,2,3,4,5,6,7]
del a[2]
print(a)    # [1, 2, 4, 5, 6, 7]

del a
print(a)    # 提示错误,列表a不存在

(七)修改操作

1.直接通过索引修改
a=[3,1,2,4,3,6,7]
a[3]=99
print(a)    # [3, 1, 2, 99, 3, 6, 7]
2.reverse()方法–将列表顺序颠倒
a=[3,1,2,4,3,6,7]
a.reverse()
print(a)    # [7, 6, 3, 4, 2, 1, 3]
3.sort()方法–排序函数,默认升序
a=[3,1,2,4,3,6,7]
a.sort()
print(a)    # [1, 2, 3, 3, 4, 6, 7]

# reverse=True -- 表示降序
a.sort(reverse=True)
print(a)    # [7, 6, 4, 3, 3, 2, 1]
a=['ab','Ab','Bc']
a.sort()
print(a)     # ['Ab', 'Bc', 'ab']

# key=str.lower -- 按照小写进行比较
a=['ab','Ab','Bc']
a.sort(key=str.lower)
print(a)     #['ab', 'Ab', 'Bc']
4.sorted()方法–对列表进行排序,并写入新的列表,且不改变原列表
a=[1, 2, 3, 3, 4, 6, 7]
b=sorted(a)
print(b)    # [1, 2, 3, 3, 4, 6, 7]
print(a)    # [3, 1, 2, 4, 3, 6, 7]

(八)查找操作

1.count()方法–计数,返回参数对应的元素值个数
a=[1,2,3,4,1,1,3,4]
b=a.count(3)     #元素'3'的个数
print(b)    # 2
2.index()方法–查找,从左向右返回找到的第一个参数对应的元素值的索引
a=[1,2,3,4,1,1,3,4]
x=a.index(4)     #返回第一次出现元素'4'的索引值
print(x)    # 3

扩展:

遍历二维列表:

a=[[1,2,3],[4,5,6,7],[8,9],10]
for x in a:
    if type(x)!=list:
        print(x)
    else:
        for y in x:
            print(y,end=' ')
        print()

# 输出 3 6 9
print(a[0][2])
print(a[1][2])
print(a[2][1])

(九)深浅拷贝

首先先好好体会一下赋值符号’=’

a=[1,2,3]
b=a
a.append(4)
print(a,b)    # [1, 2, 3, 4] [1, 2, 3, 4]
print(id(a),id(b))    # 33710664 33710664
print(a is b)    # True

a=3
b=a
a=5
print(a,b)    # 5 3

下面说一下is和’= ='的区别,
is判断的是a对象是否就是b对象,是通过id来判断的
'= ='判断的是两个值是否相等,是通过value来判断的

a=[1,2,3]
b=[1,2,3]
print(a==b)    # True
print(a is b)    # False

a='abc'
b='abc'
print(id(a))    # 30935392
print(id(b))    # 30935392

下面正式开始说明赋值、浅拷贝、深拷贝的区别:

import copy
a=[1,2,3,[4,5,[10,20]],6]
b=a
c=copy.copy(a)
d=copy.deepcopy(a)
print(a,id(a))
print(b,id(b))
print(c,id(c))
print(d,id(d))
a.append(7)
print(a,id(a))
print(b,id(b))
print(c,id(c))
print(d,id(d))
a[3].append(99)
print(a,id(a))
print(b,id(b))
print(c,id(c))
print(d,id(d))

结果:
[1, 2, 3, [4, 5, [10, 20]], 6] 40775176
[1, 2, 3, [4, 5, [10, 20]], 6] 40775176
[1, 2, 3, [4, 5, [10, 20]], 6] 40804936
[1, 2, 3, [4, 5, [10, 20]], 6] 40805000
[1, 2, 3, [4, 5, [10, 20]], 6, 7] 40775176
[1, 2, 3, [4, 5, [10, 20]], 6, 7] 40775176
[1, 2, 3, [4, 5, [10, 20]], 6] 40804936
[1, 2, 3, [4, 5, [10, 20]], 6] 40805000
[1, 2, 3, [4, 5, [10, 20], 99], 6, 7] 40775176
[1, 2, 3, [4, 5, [10, 20], 99], 6, 7] 40775176
[1, 2, 3, [4, 5, [10, 20], 99], 6] 40804936
[1, 2, 3, [4, 5, [10, 20]], 6] 40805000

由上述代码可以总结出:
'='赋值操作:改变的是变量的内存地址。
浅拷贝:仅拷贝了最外层,内部和原列表指向的是同一内存空间。
深拷贝:从内到外全部拷贝走,原列表改变与它无关。

三、元组

元组是一个不可修改的,元素以逗号分隔,以小括号包括的有序序列。

重点:有序,不可修改
a=(1,2,3,[4,5])
a[0]=9       #报错

# 元组不可修改,但是元祖中的可修改类型的变量可以修改
a[3].append(99)
print(a)     #(1, 2, 3, [4, 5, 99])

(一)遍历、合并、重复、使用’*'进行可变初始化

这里跟列表都很相似,就放在一起说了。

#遍历
a=(1,2,3,4)
for x in a:
    print(x)
#二维遍历
names=(('张三',19),('李四',20),('王五',30))
for x,y in names:
    print(x,':',y)

#合并、重复
a=(1,2)
b=(3,4)
print(a+b)    # (1, 2, 3, 4)
print(a*2)    # (1, 2, 1, 2)

# 需要注意的是:这里的*b使b变成了列表类型,而不再是元组类型
a,*b=(1,2,3,4,5)
print(a)    # 1
print(b)    # [2, 3, 4, 5]

(二)强制类型转换

# 强制类型转换  tuple--元组  list--列表
a=[1,2,3]
b=tuple(a)
print(type(b))    # <class 'tuple'>
c=list(b)
print(type(c))    # <class 'list'>

(三)在元组中,’,'号超重要!

a=(1)
print(type(a))    # <class 'int'>
a=(1,)
print(type(a))    # <class 'tuple'>
a=1,2
print(a,type(a))    # (1, 2) <class 'tuple'>
a=[1]
print(type(a))    # <class 'list'>

(四)查找操作

1.index()方法–查找参数第一次出现的索引值
a=(1,2,3,4)
print(a.index(4))    # 3
print(a.index(4,0,3))    # 报错,范围内没有 后两个参数为查找的范围,同样左闭右开

(五)enumerate()–枚举方法

a=(11,12,13,'a')
for x in enumerate(a):
    print(x)

结果:
(0, 11)
(1, 12)
(2, 13)
(3, 'a')

应用

输出7的倍数和以7结尾的数,且总结个数:

a=(1,2,3,4,5,6,7,8,9,10,14)
gs=0
for x in a:
    if x%7==0 or x%10==7:
        gs+=1
        print(x)
print('共',gs,'个')

统计元组中奇数和偶数的个数:

a=(1,2,3,4,5,6,7,8,9,10,14)
js=0
os=0
for x in a:
    if x%2==0:
        os+=1
    else:
        js+=1
print('奇数有:',js,'个;偶数有:',os,'个')

求出元组中的最大值,最小值,以及它们对应的下标:

a=(3,2,5,1,4,9,7)
max=a[0]
min=a[0]
x=0
y=0
for i in range(1,len(a)):
    if max < a[i]:
        max=a[i]
        x=i
    elif min > a[i]:
        min=a[i]
        y=i
    i+=1
print('''
最大值:%d:%d
最小值:%d:%d''' % (x,max,y,min))

两列表对应项相加,并赋值给一个新列表,输出:

big=[1,2,3,3,2,5]
small=[11,22,8,7,5,9]
s=[]
for i in range(len(big)):
    s.append(big[i]+small[i])
    print('第', i + 1, '个月业绩:', s[i])
    i+=1

传送站:

import time
a=[1,2,3,4,5,6]
while True:
    t = a[0]
    i = 0
    while i < len(a) - 1:
        a[i] = a[i + 1]
        i += 1
    a[i] = t
    time.sleep(1)
    print(a)

列表元素倒序:

#1
a=[1,2,3,4,5,6]
i=0
while i<len(a)//2:
    # t=a[i]
    # a[i]=a[len(a)-i-1]
    # a[len(a)-i-1]=t
    a[i],a[len(a)-1-i]=a[len(a)-1-i],a[i]
    i+=1
print(a)

#2
a=[1,2,3,4,5,6]
i=0
j=len(a)-1
while i<j:
    # t=a[i]
    # a[i]=a[j]
    # a[j]=t
    a[i],a[j]=a[j],a[i]
    i+=1
    j-=1
print(a)

计算a列表中含有b列表的个数:

a=[1,2,3,4,1,2,5,1,1,2]
b=[1,2]
n=0
for i in range(len(a)-1):
    # c=[]
    # c.append(a[i])
    # c.append(a[i+1])
    # if c==b:
    #     n+=1
    if a[i]==b[0] and a[i+1]==b[1]:
        n+=1
    i+=1
print(n)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值