python_列表list

列表 list (大了激素的数组)


一.什么是列表

1.数组:数组是只能存储同一种数据类型的结构

scores[43]=[12,12.0,"hello"]

2.定义列表

In [1]: li = [1,1.0,"zl",(1,2,3,4),[1,2,3,4]]

In [2]: print li
[1, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]

3.定义元组

In [3]: t = (1,1.0,"zl",(1,2,3,4),[1,2,3,4])

In [5]: print t
(1, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4])

4.元组是不可变数据类型 不能修改元素

In [6]: t[0] =  11
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-069e99c0bcf1> in <module>()
----> 1 t[0] =  11

TypeError: 'tuple' object does not support item assignment

5.列表是可变数据类型,可以修改数据

In [7]: li[0] =  11

In [8]: print li
[11, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]


二.分析列表特性(与元组对比)

1.索引

In [9]: print li
[11, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]

In [10]: li [0]  ##正向索引
Out[10]: 11

In [11]: li [-1] ##反向索引
Out[11]: [1, 2, 3, 4]

In [12]: li [-1][2] ##拿出列表最后一个元素,最后一个元素是列表,再拿出列表的第三
个元素
Out[12]: 3


2.切片

In [13]: li[3:] ##拿出最后两个元素
Out[13]: [(1, 2, 3, 4), [1, 2, 3, 4]]

In [14]: li[1:]  ##曲调列表的第一个元素
Out[14]: [1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]

In [15]: li[::-1]  ##逆转
Out[15]: [[1, 2, 3, 4], (1, 2, 3, 4), 'zl', 1.0, 11]


3.重复

In [1]: li = [1,1.0,"zl",(1,2,3,4),[1,2,3,4]]

In [2]: li * 2
Out[2]: 
[1,
 1.0,
 'zl',
 (1, 2, 3, 4),
 [1, 2, 3, 4],
 1,
 1.0,
 'zl',
 (1, 2, 3, 4),
 [1, 2, 3, 4]]


4.连接(不建议这样连接两个列表,后面会讲解更高效的方法)

In [17]: li1 = ["zl","new year"]

In [18]: li + li1
Out[18]: [11, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4], 'zl', 'new year']



5.成员操作符

In [19]: print li
[11, 1.0, 'zl', (1, 2, 3, 4), [1, 2, 3, 4]]

In [20]: print 13 in li
False

In [21]: print 13 not in li
True




三.列表的增删改查

1.增

In [23]: allow_ip = ["172.25.254.1","172.25.254.2","172.25.254.3"]
In [24]: allow_ip.append("172.25.254.4") ##追加元素到列表的最后

In [25]: print allow_ip
['172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4']

In [26]: allow_ip.insert(0,"192.168.1.253") ##添加元素到指定位置

In [27]: print allow_ip
['192.168.1.253', '172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4']

In [29]: allow_ip.extend("hello")  ##增加多个元素到列表最后

#iterable 代表可迭代的
# 目前学习的可迭代对象有: str, list, tuple
In [30]: print allow_ip['192.168.1.253', '172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4', 'h', 'e', 'l', 'l', 'o']

2.改

In [2]:  allow_ip = ['192.168.1.253', '172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4', 'h', 'e', 'l', 'l', 'o']
In [3]: allow_ip[0] ="192.168.1.1"   # 通过列表的索引,对列表某个索引值重新赋值
In [4]: print allow_ip
['192.168.1.1', '172.25.254.1', '172.25.254.2', '172.25.254.3', '172.25.254.4', 'h', 'e', 'l', 'l', 'o']

3.查

In [5]: buy = ["apple","computer","apple"]
In [9]: print buy.count("apple")  # 统计某个元素在列表中出现的次数;
2
In [10]: print buy.index("computer")   # 找到某个值在列表中的索引值
1 


4.删

In [11]: buy.remove("apple")   # 删除列表中遇到的第一个value值;

In [12]: print buy
['computer', 'apple']

In [13]: del buy[0]         # 删除列表中第i个索引值; 

In [14]: print buy
['apple']

In [15]: buy = ["apple","computer","apple"]

In [16]: print buy['apple', 'computer', 'apple']
In [18]: del buy[1:]    # 删除除了第一个元素之外的其他索引值
In [19]: print buy
['apple']

In [20]: del buy    # 删除列表对象

In [23]: li = [1,2,45,23,21,45]

In [24]: li.pop()    # 删除指定索引对应的值,默认是最后一个元素;
Out[24]: 45

In [25]: print li
[1, 2, 45, 23, 21]

In [26]: li.pop(0)   # 删除列表的第一个索引;
Out[26]: 1

In [27]: print li
[2, 45, 23, 21]







四.其他排序及逆转

1.排序

# 排序,如果说都是数字,按照数字大小排序;
# 是字母的话,按照ASCII码来排序;
# **** 如何查看对应的ASCII码? ord('a')

In [27]: print li
[2, 45, 23, 21]

In [28]: li.sort()

In [29]: print li
[2, 21, 23, 45]

2.逆转

In [33]: print li
['alice', 'hello']
In [34]: li.reverse()

In [35]: print li
['hello', 'alice']



五.列表练习

1.

#!/usr/bin/env python
#coding:utf-8

'''
综合考察练习:
	1.用户名和密码分别保存在列表中
	2.用户登陆时,判断该用户是否注册
	3.用户登陆时,为防止黑客暴力破解,仅有三次机会
	4.如果登陆成功,显示登陆成功

知识点学习:
	python中特有的while...else...语句
	如果满足while后面的语句,执行while循环的程序。如果不满足,执行else中的程序

'''

users = ["zl","lulubao"]
password = ["123","456"]

trycount = 0
while trycount<3:
	username = raw_input("输入用户名:")
	if not username in users:
		print "用户未注册"
		break
	password1 =raw_input("输入密码:")
	index = users.index(username)
	if password1 == password[index]:
		print "登陆成功"
		exit()
	else:
		print "登陆失败"
		trycount += 1

else: print "密码错误超过三次 强制退出系统"


2.

#!/usr/bin/env python
#coding:utf-8

'''
应用案例:
生成多个银行卡号
卡号由6位组成, 前3位是610, 后面的依次是001, 002, 003...100

'''


cardids = []
for i in range(1,101):    ##i = 1,2,3....100
	a = "610%.3d" %i  ##a = 610001,610002,....610100
	cardids.append(a)

# 卡号显示,每10个卡号换行显示;
for i,j in enumerate(cardids): ##玫举 i,j = 0 610001
			if i%10==0:
				print
			print j,
						





六.列表构建栈和队列数据结构


栈是先进后出(LIFO-first in last out);
类似于往箱子里面放书;
代码实现如下: (实际应用中这样太麻烦,将来会用类实现)

#!/usr/bin/env python
#coding:utf-8

stack = []
info = """
            栈操作                    
1). 入栈
2). 出栈
3). 栈长度
4). 查看
5). 退出

请输入你的选择:"""

while True:
	choice = raw_input(info).strip()   ##省略空格
	if choice == "1":
		print "入栈操作".center(40, "*")
	        value = raw_input("请输入入栈元素:")
	        stack.append(value)  ##追加在stack栈最后
		print "元素%s入栈成功..." %(value)
	elif choice == "2":
		print "出栈操作".center(40, "*")
	        # if len(stack) == 0:
	        if not stack:
	        	print "栈为空"
	        else:
			stack.pop()  ##输出最后一个元素
			print "元素%s出栈成功...." %(item)
	elif choice == "3":
		print "查看栈长度".center(40, "*")
	        print len(stack)
		
	elif choice == "4":
		print "查看栈元素".center(40, "*")
	        if not stack:
	                print "栈为空"
	        for i in stack:
	                print i
	elif choice == "5":
	        exit()
	else:
	        print "请输入正确的选择......"
 


队列
队列是先进先出(FIFO):
类似于去餐厅买饭排队;





七.列表内置方法

cmp
min, max
zip
enumerate









  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值