导航:首页 > 编程语言 > 列表默认值python

列表默认值python

发布时间:2023-02-06 20:17:01

A. python其实很简单 第九章 列表与元组(一)

在前面,我们要保存一个数据,需要先定义一个变量,而且一个变量中只能保存一个数据。譬如,语句:a1=1,值“1”就被保存了,但要保存“2”,就还需要再定义一个变量:a2=2......这样以来,随着数据的增多,岂不是要定义更多的变量吗?

可以使用一个新的数据类型,它记录很多数据,并且将它们按照顺序存储在连续的内存空间中,这便是序列。Python中有5种常用的序列结构,分别是列表、元组、集合、字典和字符串。

9.1列表

语法格式:

listname=[element1,element2,element3,......,elementn]

其中,listname为列表名,element1,element2,element3,......,elementn表示列表中的元素。各个元素的数据类型可以相同,也可以不同,但通常元素的类型都是相同的,含义也是相同的。

如:

list1=[‘风’,’马‘,’牛’,1,2,3,’a’,’b’,’c’]就没有太多的实际用途。

list2=['张三','男',18,�']虽然元素的类型不同,但表示了同一个人的信息。

1、访问列表元素

列表中元素的索引号从0开始标记,访问列表元素时,可以直接按照索引号读取。

如:

list2=['张三','男',18,�']

print(list2[1]) #输出列表中索引号为1的元素

输出结果:男

和字符串一样,序列都是可以使用切片操作的。

如:

print(list2[:2])

输出结果:['张三', '男']

print(list2[2:])

输出结果:[18, �']

2、使用range()函数创建数值列表

格式:range(start, stop [,step]) ;start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0 。range() 方法生成一段左闭右开的整数范围。

可以使用range()函数创建数值列表,如:

list1=list(range(10,20,2))

print(list1)

运行结果:[10, 12, 14, 16, 18]

3、删除列表

语法格式如下:

del listname

其中,listname为要删除列表的名称。

删除列表与删除变量的方法是完全一样的,前面已经介绍过了。

4、遍历列表

常用的遍历列表的方法有是利用for语句,举例如下:

list1=list(range(10))

for item in list1:

print(item,end=' ') # end=’ ‘表示以空格结束,如果不写这个参数,相当于默认值end=’ ’

输出结果:0 1 2 3 4 5 6 7 8 9

为了获取列表元素的索引值,就需要使用enumerate()函数。

list1=list(range(10,20,2))

for index,item in enumerate(list1):

print(index,'-',item,end=' ')

输出结果:0 - 10 1 - 12 2 - 14 3 - 16 4 - 18

5、追加、修改和删除列表元素

追加元素

>>> list1=['春','夏','秋']

>>> list1.append('冬')

>>> list1

['春', '夏', '秋', '冬']

还有一种方法,就是使用“+”号将两个序列连接起来。如:

list1=['春','夏','秋']

list1=list1+['冬']

print(list1)

输出结果为:['春', '夏', '秋', '冬']

注意,下面的做法是错误的:

>>> list1=['春','夏','秋']

>>> list1=list1+'冬'

Traceback (most recent call last):

File " ", line 1, in

list1=list1+'冬'

TypeError: can only concatenate list (not "str") to list

从这个提示可知,列表只能与列表连接,而不能与字符串连接。

修改元素

>>> list1[2]='autumn' #通过索引对元素直接赋值

>>> print(list1)

['春', '夏', 'autumn', '冬']

删除元素

>>> del list1[2] #通过索引直接删除元素

>>> print(list1)

['春', '夏', '冬']

6、列表元素排序

在讨论列表元素排序时,为了将有序列表变成无序列表,这里用到了shuffle()函数,但它不是Python的内置函数,需要先使用import语句将random模块包含进来,这样才能像使用内置函数那样使用扩展模块中的函数。

>>> import random #导入random模块

>>> list1=list(range(10)) #生成列表,元素为0到9的整数。

>>> list1

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> random.shuffle(list1) #用random包中的shuffle()函数将list1中元素次序打乱

>>> list1

[8, 6, 3, 5, 0, 7, 1, 9, 2, 4]

>>> list1.sort() #对list1升序排列

>>> list1

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> random.shuffle(list1) #将list1顺序重新打乱

>>> list1

[5, 9, 7, 8, 4, 3, 2, 0, 6, 1]

>>> list1.sort(reverse=True) #对list1降序排列

>>> list1

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

方法sort()的语法格式:

listname.sort(key=None,reverse=False)

其中,listname表示要排序的列表;key表示指定一个键,如”key=str.lower”表示排序时不区分字母大小写;reverse为True表示降序排列(为默认值,可省缺),为False表示升序排列。

还有一个函数sorted(),功能与方法sort()相似。格式如下:

sorted(listname,key=None,reverse=False)

7、 利用列表推导式快速生成一个列表

例1:生成指定范围的数值列表。

>>> import random

>>> list1=[random.randint(0,20) for i in range(10)]

>>> list1

[16, 20, 19, 6, 5, 7, 10, 5, 12, 5] #生成了包含10个值在0到20之间的元素构成的列表。

例2:根据现有列表生成新的列表。

>>> radius=list(range(1,6)) #生成列表 radius保存半径的值

>>> radius

[1, 2, 3, 4, 5]

>>> s=[round(2*3.14*r,2) for r in radius]

#生成列表s,将计算得到的周长值保存起来,其中round()可以保留指定小数位,格式 round(var, n),var为变量名,n为指定保留小数位。

>>> s

[6.28, 12.56, 18.84, 25.12, 31.4]

例3:从列表中选择符合条件的元素组成新的列表。

>>> score=[98,65,77,56,82,89] #列表score用来存储成绩

>>> good=[x for x in score if x>=80]

#从列表score中选取>=80的元素存入新列表good中

>>> good

[98, 82, 89]

count()、index()和sum()方法

count()方法

用于统计指定元素在列表中出现的次数。

例:

>>> list1=['a','b','c','d','e','f','c','d','e','a','b','c','d']

>>> num=list1.count('c') #统计列表list1中'c'的个数

>>> num

3

index()方法

用于获取指定元素在列表中第一次出现的索引值。

>>> list1=['a','b','c','d','e','f','c','d','e','a','b','c','d']

>>> position=list1.index('c')

>>> position

2

sum()方法

用于计算数值列表中全部或指定元素的和。

>>> list1=[1,2,3,4,5]

>>> total=sum(list1) #计算列表list1中全部元素的和

>>> total

15

>>> total=sum(list1,1) #在列表list1全部元素的和后,在加上参数(“1”)的值

>>> total

16

>>> total=sum(list1[:2]) #计算切片list1[:2]中各元素的和

>>> total

3

二维列表

格式:listname[下标1][下标2]

其中,listname表示列表的名称,下标1表示列表中的行号,下标2表示列表中的列号。对于n行m列的二维列表,第一个元素的行号和列号都是0,最后一个元素的行号和列号都是n-1。如下所示:

list[0][0] list[0][1] list[0][2] ............ list[0][m-1]

list[1][0] list[1][1] list[1][2] ............ list[1][m-1]

......

......

list[n-1][0] list[n-1][1] list[n-1][2] ............ list[n-1][m-1]

通俗地讲,如果一个列表中的元素本身就是一个列表,则这个列表就是一个二维列表。

如:

>>> list1=['a1','b1','c1','d1']

>>> list2=['a2','b2','c2','d2']

>>> list3=['a3','b3','c3','d3']

>>> listtwo=[list1,list2,list3]

>>> listtwo

[['a1', 'b1', 'c1', 'd1'], ['a2', 'b2', 'c2', 'd2'], ['a3', 'b3', 'c3', 'd3']]

如果要查看二维列表listtwo按照行、列的排列,可以运行如下代码:

for i in range(3):

for j in range(4):

print(listtwo[i][j],end=' ')

print()

运行结果:

a1 b1 c1 d1

a2 b2 c2 d2

a3 b3 c3 d3

如果要读取二维列表中的某一行,可以使用如下方法:

>>> listtwo[2] #读取第3行的元素(注意索引号都是从0开始的)

['a3', 'b3', 'c3', 'd3']

如果要读取某一个元素的值,可以使用如下方法:

>>> listtwo[2][2] #读取第3行第3列的元素

'c3'

B. Python中定义函数默认参数值的使用注意事项

4.7.1. 默认参数值
最常用的一种形式是为一个或多个参数指定默认值。这会创建一个可以使用比定义是允许的参数更少的参数调用的函数,例如:
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while True:
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
raise OSError('uncooperative user')
print(complaint)
这个函数可以通过几种不同的方式调用:
只给出必要的参数:
ask_ok('Do you really want to quit?')
给出一个可选的参数:
ask_ok('OK to overwrite the file?', 2)
或者给出所有的参数:
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
这个例子还介绍了 in 关键字。它测定序列中是否包含某个确定的值。
默认值在函数 定义 作用域被解析,如下所示:
i = 5
def f(arg=i):
print(arg)
i = 6
f()
将会输出 5。
重要警告: 默认值只被赋值一次。这使得当默认值是可变对象时会有所不同,比如列表、字典或者大多数类的实例。例如,下面的函数在后续调用过程中会累积(前面)传给它的参数:
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
这将输出:
[1]
[1, 2]
[1, 2, 3]
如果你不想让默认值在后续调用中累积,你可以像下面一样定义函数:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L

C. Python中的列表

列表(list)是Python中一个非常重要的类型,用于管理一组数据,列表的形式如下所示
country = ['China', 'Germany', 'Russia', 'America']

1)数据包含在引号中,Python中单引号和双引号具有相同的作用
2)使用逗号分隔数据,整个列表包含在一个中括号中
3)适用赋值操作符将一个列表赋值给一个变量名如上述例子中的“country”, Python的变量名不需要声明类型

country = []

列表不仅可以存放字符串这样的数据,还可以存放混合类型的数据,例如在列表中存储列表

除了列表外还可以存储字典和元组,字典和元组另作介绍

列表可以像数组那样通过下标获取列表中的数据,数据类型---字符串

列表可以适用冒号“:”操作符选取列表中的一部分数据,选取出的数据成为切片,实际上是字列表,但这些数据需要是连续的。
此外数据可以正向取如示例中的“0 : 2”得到列表['China', 'Germany'], 也可以反向取如“-2:-1”
需要注意的是即使切片只取一个数据得到的也是一个列表,而不是一个字符串,与使用索引得到的数据是不同的

添加数据可以使用 insert() 和 append() 两种方法,如下所示:

insert() 第一个参数确定插入的位置,在这个位置之后插入需要插入的数据, append() 将数据添加到列表的尾部

从列表中找出某个值第一个匹配项的索引位置

只能查找第一层数据,如果差列表中的列表,需要将列表全部输入。函数中的start和stop用于确定搜索范围

移除列表中的一个元素(默认最后一个元素),并且返回该元素的值

移除列表中某个值的第一个匹配项

反向列表中元素

对原列表进行排序

D. 如何在Python中定义静态变量

Python使用函数默认值实现函数静态变量的方法,具体方法如下:
一、Python函数默认值

Python函数默认值的使用可以在函数调用时写代码提供方便,很多时候我们只要使用默认值就可以了。 所以函数默认值在python中用到的很多,尤其是在类中间,类的初始化函数中一帮都会用到默认值。 使用类时能够方便的创建类,而不需要传递一堆参数。

只要在函数参数名后面加上 ”=defalut_value”,函数默认值就定义好了。有一个地方需要注意的是,有默认值的参数必须在函数参数列表的最后,不允许将没有默认值的参数放在有默认值的参数后,因为如果你那样定义的话,解释器将不知道如何去传递参数。

先来看一段示例代码:

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while True:
ok = raw_input(prompt)
if ok in ('y', 'ye', 'yes'): return True
if ok in ('n', 'no', 'nop', 'nope'): return False
retries = retries - 1
if retries < 0: raise IOError, 'refusenik user'
print complaint

你调用上面的函数时,可以修改重试次数和输出的提示语言,如果你比较懒得话,那么什么都不用改。

二、python使用函数默认值来实现函数静态变量的功能

Python中是不支持静态变量的,但是我们可以通过函数的默认值来实现静态变量的功能。
当函数的默认值是内容是可变的类时,类的内容可变,而类的名字没变。(相当于开辟的内存区域没有变,而其中内容可以变化)。
这是因为python中函数的默认值只会被执行一次,(和静态变量一样,静态变量初始化也是被执行一次。)这就是他们的共同点。

再来看下面的程序片段:

def f(a, L=[]):
L.append(a)
return L

print f(1)
print f(2)
print f(3)
print f(4,['x'])
print f(5)

其输出结果是:

[1]
[1, 2]
[1, 2, 3]
['x', 4]
[1, 2, 3, 5]

前面的好理解,为什么最后 “print f(5)”的输出是 “[1, 2, 3, 5]”呢?

这是因为 “print f(4,['x'])”时,默认变量并没有被改变,因为默认变量的初始化只是被执行了一次(第一次使用默认值调用),初始化执行开辟的内存区(我们可以称之为默认变量)没有被改变,所以最后的输出结果是“[1, 2, 3, 5]”。

E. python 内置排序函数使用

python内置关于排序的工具主要有两个一个是列表自带的 sort() 方法,另外一个是 sorted() 函数。Python 列表内置方法可以直接修改列表。而 sorted() 内置函数从一个可迭代对象(列表,元组等都可以)构建一个新的排序列表。其函数原型分别如下:

对列表进行默认排序

从函数原型来看,可以看到两者都具有两个可选参数,它们都必须指定为关键字参数。
key 指定带有单个参数的函数,用于从 iterable 的每个元素中提取用于比较的键 (例如 key=str.lower)。默认值为 None (直接比较元素)。 key 形参的值应该是个函数(或其他可调用对象),它接受一个参数并返回一个用于排序的键。

假设有其他类型的变量,比如一个自定义的类或者列表中又是一个列表。以官网例子为例有这样一个列表,其元素为元组,

可以用以下方式按照年龄排序

类似的有自定义类

可以用如下方式进行排序

也可以显示定义一个函数,且只有一个参数,返回用于排序的键,比如

总之就是定义一个函数返回一个用于排序的键,可以用lambda函数或者 def 定义都可以。

上面实现的简单函数实际就是实现了返回一个有序结构的第 n 的元素,或者某个类中的某个属性,因此 Python 提供了便利功能,使访问器功能更容易,更快捷。operator 模块有 itemgetter() 、 attrgetter() 函数。分别完成返回第 n 个元素,某个属性功能。上面的排序可以用如下方式进行实现

在python2中,sort有一个 cmp 参数,即用一个函数来自定义比较,在python3中这种方式被取消。为了继承类似的用法,在 Python 3.2 中, functools.cmp_to_key() 函数被添加到标准库中的 functools 模块中。
这种作用先定义如何比较两个变量,以上面的学生列表按照年龄排序为例

这种做法自定义比较函数接收两个形参,返回比较结果(bool),而新式方法接受一个参数,返回的是比较的键。

假设有字典 d = {'b':2, 'a':1,'c':8,'d':4} ,则可以通过以下方式对字典按照键和值进行排序

F. python参数默认值 怎么是tuple

参数传递的事了。rol("hello",*args)这里面*args可以解压,就是把列表打散,然后复制给函数,当然函数里面也有*args,所以又生成了一个tuple。下面的输出结果跟你的一样。注意星号的用法。

阅读全文

与列表默认值python相关的资料

热点内容
php5217漏洞 浏览:510
泰国 什么什么嫂 恐怖片 浏览:376
高中生打气球解压视频 浏览:6
无水印电影下载网站推荐 浏览:702
大尺度男性露j电影有哪些 浏览:353
蚁群算法飞行器 浏览:553
好看的免费电影网站 浏览:633
适合情侣在私人影院的电影 浏览:647
编程器备份固件 浏览:520
微信朋友圈照片压缩了 浏览:218
台湾鸭子电影三部曲 浏览:859
android设置前景色 浏览:191
专门百度小程序开发源码 浏览:235
安卓手机为什么微信不能更新到最新版本 浏览:817
pdf赋税原理 浏览:261
韩国电影合集(3个小时) 浏览:88
程序员应该吃什么补脑子补身体 浏览:336
韩国床上在线观看 浏览:593
最牛逼的网址直接看去看不用下载免费看 浏览:96
c中预处理命令教学 浏览:54