Python-列表和元组

一、列表定义

列表是python中一种基本的数据结构。list、数组、array都指的是列表。

列表为它的每一个元素分配一个下标,标记该元素的位置。也可以将下标叫做索引、角标、编号。下标从0开始计数。另外最后一个元素的下标是-1。

定义列表时,用中括号[]将其中的元素括起来,不同元素之间用逗号“,”分隔。

例如:stus=['小红','小黑','小白','小兰']

列表stus中有4个元素,索引分别为0,1,2,3。“小红”的索引是0。“小兰”的索引是3,也是-1。

  

二、列表操作

1、增

给列表增加元素有两种方法,append和insert。

append:在列表末尾增加一个元素

insert:在指定位置增加元素

例如:

  

2、删

 删除元素的方法有pop,remove,del,clear。

pop:删除指定位置的元素,格式为:list.pop(索引)

   

remove:删除指定元素,格式为:list.remove(元素)

  

del:删除指定位置的元素,格式为:del list[索引]

  

clear:清空列表,格式为:list.clear()

  

3、修改

 修改时,直接对对应元素赋值即可,如果指定下标不存在,会报错

  

4、查询

(1)查询指定索引的元素,直接用 list[索引]

   

(2)查询元素的索引,格式为:list.index(元素),如果元素不存在,会报错

  

(3)查询某元素在列表中出现的次数,格式为  list.count(元素)

   

5、其他操作

(1)反转

反转的语法格式为:list.reverse()

  

 (2)排序

排序的语法格式为:list.sort(),默认为升序排序。  降序为:list.sort(reverse=True)

  

字母也可以排序

  

(3)列表合并

用“+”号可以直接将2个列表合并为一个

   

一个列表显示多次,可以用list*n的格式,n是几,就重复几次

  

三、多维数组

多维数组就是数组里有嵌套了数组,取值时需要一级级的取。

下图里,我们想取到 'usa' 这个元素。

首先 infos[-1]指的是最外层列表的最后一个元素,也就是 ['Rose','student',92.5,['english','usa',25]]

infos[-1][-1]指的是  ['Rose','student',92.5,['english','usa',25]]列表的最后一个元素,也就是['english','usa',25]

最后用 infos[-1][-1][0] 取到 ‘usa’ 这个元素。

四、切片

(1)切片是list取值的一种方式,取出的值仍为列表格式。

取值的格式为:list[下标1:下标2],取出下标1到下标2之间的序列,包含下标1,不包含下标2。即顾头不顾尾。

这样说比较不容易理解,看下面的例子。

 

 names[1:4],顾头不顾尾,即取出下标为1,2,3的元素,运行结果如下图:

另外,如果从头开始取,取到后面某个下标结束,那么开头的下标可以省略不写。

如果从某个小标开始取,取到末尾结束,那么末尾的下标可以省略不写。

如果开头和末尾列表都不写,则取所有的元素。

(2)设置步长

设置步长的语法格式为:list[下标1:下标2:步长],步长不写的话,默认为1.

例:取列表lis下标为0-9,间隔为2的元素。

  

步长为正数,从左边开始取值;步长为负数,从右边开始取值。

例如:

  

那么我们可以发现,如果步长设为-1,看上去好像字符串也反转了,如下图;

   

看上去好像是和reverse效果一样,其实是有区别的。list.reverse()是将整个列表的元素反转了,而list[::-1]没有改变list,只是反向打印了这个list的元素。

  

  

五、列表循环

可迭代对象指的是可以循环的,字符串,列表都是可迭代对象,int和float类型的都不是可迭代对象。

for循环在循环可迭代对象的时候,每次循环的都是里面的元素。列表可直接循环里面的元素,如下:

   

例:统计作业上交的情况。

stus=[
	  ['小明','未交'],
	  ['小白','已交'], ['小紫','已交'],
	  ['小红','未交'], ['小绿','未交'],
	  ['小黄','未交'], ['小黑','已交']
	]
pass_list = [] #交作业的名字
fail_list = [] #没交作业的名字

for info in stus:
    if info[-1]=='已交':
        pass_list.append(info[0])
    else:
        fail_list.append(info[0])
print('未交作业的同学是%s,一共有%d人'%(fail_list,len(fail_list)))
print('已交作业的同学是%s,一共有%d人'%(pass_list,len(pass_list)))

运行结果为 

六、元组的定义

定义元组用小括号(),如果元组中只有一个元素,需要在后面加逗号,否则数据类型是元素的类型,不是元组。如下:

  

  

七、元组的操作

元组和列表的区别是:元组里面的元素无法修改,增删改都不行。

1、查询

只有两种查询操作,index和count

index:找到元素的下标,语法格式为,tuple.index(元素)

 count:找到元素出现的次数,语法格式为,tuple.count(元素)

  

 2、切片

 元组切片和列表一样

  

3、循环

元组也可以循环

  

 八、小练习

验证用户名是否合法。合法的用户名需满足以下条件:(1)未被注册过;(2)长度在6-12位之间;(3)最多输入3次。

all_users = ['Lily001','Rose002','John003','Bob004','Alice005']
for i in range(3):
    username = input('请输入您的用户名:').strip()
    if len(username)>5 and len(username)<13:
        if all_users.count(username)>0:
            print('这个用户名已被注册!')
        else:
            print('名字不错,赶紧去注册吧!')
            break
    else:
        print('用户名长度不合法!长度应在6-12之间')
else:
    print('失败次数过多')

  

 

posted @ 2018-03-26 22:03  wind1004  阅读(524)  评论(0编辑  收藏  举报