关于比较
如果两个列表都全是数,那就可以用>之类的比较
ls1=[30,1,2,0]
ls2=[1,21,133]
ls1>ls2
输出结果:True
分析 依次比较相同位置的元素,如果相同,再比较下一个,本例中,第一个比较的30>1,故对于ls1>ls2的判定为True。如果两个列表所有元素都相同,则认为两列表相等。如果一个列表A(整体)与另一个列表B的前n项(有序)组成的列表相等,则认为B>A。
引申
- 若ls1=[30,1,2],结果如何?
- 若ls1=[1,21,133,0],结果如何?
- 若ls1=[0,30,1,2],结果如何?
- 若ls1=[‘0’,30,1,2],结果如何?
- 若ls1=[‘30’,1,2,0] ,ls2=[‘1’,21,133],结果如何?
字符比较大小按Unicode码比较,字符串比较规则与列表比较规则相同
str_a='abc'
str_b='c'
b>a
输出结果:False
关于数据类型
a,b,c,d=[],(),{},''
关于以上代码,请问a,b,c,d分别为什么属于数据类型?
print('type(a)={}\ntype(b)={}\ntype(c)={}\ntype(d)={}'\
.format(type(a),type(b),type(c),type(d)))
随机抽查:format,\n,\的用法,还记得么?
type(a)=<class 'list'>
type(b)=<class 'tuple'>
type(c)=<class 'dict'>
type(d)=<class 'str'>
关于函数中的操作是否改变函数值
前置芝士 实参:在调用时传递给函数的参数,即传递给被调用函数的值。 形参:在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。
def fun(a,b):
...
fun(a,b)
注:实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 实例
def add_run(L=None):
if L is None:
L=[]
L.append('Run')
return L
add_run()
print(add_run(['Lying']))
输出结果:['Lying','Run']
分析 第一个add_run(),其返回值并未被使用,L是其定义的局部变量,在函数结束该次运行后即被释放(free?),故不会影响add_run([‘Lying’])的返回值。 (1)
L=[]
x=3
def fun(x):
L.append(x)
x=5
fun(x)
print('L = {}, x = {}'.format(L, x))
输出结果:L=[3], x=3
(2)
l=[1]
def f():
l[0]=2
f()
print(l)
输出结果:[2]
思考 如果将函数内的l[0]=2改为l[1]=2呢?
IndexError: list assignment index out of range
分析 函数中的x是作为函数里的局部变量,其改变不影响全局变量x的值。但在函数中如果修改列表、字典等之中元素的值,则会引起该全局变量的改变。 其实在 (1) 中,函数内的x是存在歧义的,因为既可以表示引用全局变量x,也可以表示创建一个新的局部变量,所以python默认指定创建一个新的局部变量来消除这一歧义,但对于 (2) 中的列表l而言,l[0] = 2不存在这种歧义,因此直接修改了全局变量。
ls1=[1,2,3,4,5]
ls2=[6,7,8,9,10]
def fun():
ls1=ls2
print(ls1)
fun()
print(ls1)
输出结果:
[6,7,8,9,10]
[1,2,3,4,5]
你看明白了吗?
随机抽查:关于global和nonlocal ,给形参设置默认值,使用*a 和 **a方式获取变长实参的区别,以及各种参数传递方式和他们的优先级……这些你还记得吗?
一些关于函数的提醒
- 将可变对象用作函数实参
函数的实参传递的是对象的引用,形参则成为指向对象的新引用。对于不可变对象(如元组、字符串和数值),对形参的操作不会影响函数外部的代码。但如果传入的是可变对象(如列表和字典),则对该对象做出的任何改动都会改变该实参在函数外引用的值。函数内部对形参的重新赋值不会影响实参。
def f(n,list1,list2):
list1.append(3)
list2=[4,5,6]
n = n+1
x=5
y=[1,2]
z=[4,5]
f(x,y,z)
print(x,y,z)
输出结果:5 [1, 2, 3] [4, 5]
def f(n,list1,list2):
list1.append(3)
list2=[4,5,6]
n = n+1
n=5
list1=[1,2]
list2=[4,5]
f(n,list1,list2)
print(n,list1,list2)
- 函数内的局部变量可以和全局变量名字相同,but,全局变量名不能和函数名相同
关于pop
list1.pop(_)这个空里填的是下标(index),可以是0123和-1-2-3两种都可以。 pop函数的作用:移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
ls=[1,2,3,4,5,6,7]
print(ls.pop(0),len(ls))
输出结果:1 6
关于列表初始化
list_1=[0]*26
ls=[m+n for m in 'AB' for n in 'CD']
print(ls)
输出结果:['AC', 'AD', 'BC', 'BD']
关于index
在ls=[1,2,3,3]中,ls.index(3)的输出结果 答案 2 分析 index()函数会在序列中检索参数并返回第一次出现的索引,没找到就会报错。index()函数的完整语法(以字符串检索为例):str<1>.index(str<2>, beg=0<3>, end=len(string)<4>)
<1> 原字符串 <2> 想要检索的子串 <3> 开始索引的位置,默认为0。 <4> 结束索引的位置,默认为字符串的长度
|