列表list,字典dict

列表list

数组是只能存储同一种数据类型的结构;
定义列表[]:可变数据类型,可以修改元素
In [1]: li = [1,1.2,"hello",(1,3,4),[1,4,5]]

In [10]: li[0] = 17

In [11]: li
Out[11]: [17, 1.2, 'hello', (1, 3, 4), [1, 4, 5]]

定义元组():不可变数据类型,不能修改元素
In [7]: t = (12,1.2,"hello",(1,3,4),[1,4,5])

In [8]: t
Out[8]: (12, 1.2, 'hello', (1, 3, 4), [1, 4, 5])

In [9]: t(0) = 13
  File "<ipython-input-9-457695fb6382>", line 1
    t(0) = 13
SyntaxError: can't assign to function call

这里写图片描述

分析列表的特性(与元组作对比)
*索引
正向索引
In [12]: li[0]
Out[12]: 17

反向索引
In [13]: li[-1]
Out[13]: [1, 4, 5]

拿出最后一个元素,最后一个元素是列表,在拿出列表的第三个元素
In [14]: li[-1][1]
Out[14]: 4

*切片
去掉列表的第一个元素,[2:]去掉列表的前两个元素
In [15]: li[1:]
Out[15]: [1.2, 'hello', (1, 3, 4), [1, 4, 5]]

逆序显示
In [16]: li[::-1]
Out[16]: [[1, 4, 5], (1, 3, 4), 'hello', 1.2, 17]

*重复连接
In [17]: li * 2
Out[17]: 
[17,
 1.2,
 'hello',
 (1, 3, 4),
 [1, 4, 5],
 17,
 1.2,
 'hello',
 (1, 3, 4),
 [1, 4, 5]]

不建议使用此连接
In [18]: li1 = [88,8.8]

In [19]: li + li1
Out[19]: [17, 1.2, 'hello', (1, 3, 4), [1, 4, 5], 88, 8.8]

*成员操作符
In [27]: li
Out[27]: [17, 1.2, 'hello', (1, 3, 4), [1, 4, 5]]

In [28]: 1.2 in li   ##1.2在列表中
Out[28]: True

In [29]: 17 not in li   ##17不在列表li中
Out[29]: False


例:
#!/usr/bin/python
#coding:utf-8
''''
1.用户名和密码分别存在列表中
  用户登录时判断用户是否注册
2.用户登录时,输入用户名和密码,判断是否登陆成功,用户和密码一一对应
3.用户登录有三次机会,超过三次还未成功,则报错
'''

print ("=======用户登录======")
trycount = 0
h = ['westos','root']
p = ['redhat','westos']
while trycount < 3:
      hostname = raw_input("用户名称:")
     # password = raw_input("用户密码:")
      if not hostname in h:
         print '用户未注册!'
         break
      else:
         password = raw_input("用户密码:")
         #if password == p[h.index(hostname)]:
         if hostname == h[p.index(password)]:
              print "登陆成功!"
              exit()
         else:
              if trycount < 2:
                 print "登录失败!"
                 trycount += 1
else:
      print "超过三次,不可再登陆!"

这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述

ip白名单:
*增
追加元素到列表的最后s.append()
In [20]: allow_ip = ['172.25.254.11','172.25.254.12','172.25.254.13']

In [21]: allow_ip.append('172.25.254.14')

In [22]: allow_ip
Out[22]: ['172.25.254.11', '172.25.254.12', '172.25.254.13', '172.25.254.14']

增加元素到列表的指定位置s.insert()
In [23]: allow_ip.insert(0,'172.25.254.10')

In [24]: allow_ip
Out[24]: 
['172.25.254.10',
 '172.25.254.11',
 '172.25.254.12',
 '172.25.254.13',
 '172.25.254.14']

增加多个元素到列表最后s.extend()
iterable代表可迭代的(str,list,tupleIn [25]: allow_ip.extend(['172.25.254.15','172.25.254.16'])

In [26]: allow_ip
Out[26]: 
['172.25.254.10',
 '172.25.254.11',
 '172.25.254.12',
 '172.25.254.13',
 '172.25.254.14',
 '172.25.254.15',
 '172.25.254.16']

*改
通过列表的索引,丢列表的某个索引重新赋值
In [31]: allow_ip[0] = '172.25.254.17'
In [32]: allow_ip
Out[32]: 
['172.25.254.17',
 '172.25.254.11',
 '172.25.254.12',
 '172.25.254.13',
 '172.25.254.14',
 '172.25.254.15',
 '172.25.254.16']

统计某个元素在列表中出现的次数s.count()
In [33]: allow_ip.count('172.25.254.12')
Out[33]: 1

找到某个元素在列表中的索引值s.index()
In [34]: allow_ip.index('172.25.254.15')
Out[34]: 5


*删除
删除列表中遇到的第一个value值s.remove()
In [35]: allow_ip.remove('172.25.254.17')

In [36]: allow_ip
Out[36]: 
['172.25.254.11',
 '172.25.254.12',
 '172.25.254.13',
 '172.25.254.14',
 '172.25.254.15',
 '172.25.254.16']

删除列表中的第i个索引值del s[]

In [37]: del allow_ip[2]

In [38]: allow_ip
Out[38]: 
['172.25.254.11',
 '172.25.254.12',
 '172.25.254.14',
 '172.25.254.15',
 '172.25.254.16']

删除除了第一个元素之外的其他索引值del s[i:]
In [39]: del allow_ip[1:]

In [40]: allow_ip
Out[40]: ['172.25.254.11']

删除列表对象del s

In [41]: del allow_ip

删除指定索引对应的值,默认是最后一个
In [4]: s = [1,2,3,45,56]
In [6]: s.pop(1)
Out[6]: 2

In [7]: s
Out[7]: [1, 3, 45, 56]

In [8]: s.pop()
Out[8]: 56

In [9]: s
Out[9]: [1, 3, 45]

*其他的排序及逆转

排序,如果都是数字,按照数字大小排序,是字母的话按照ASCII码来排序

In [12]: s = [11,2,9.56]

In [13]: s.sort()

In [14]: s
Out[14]: [2, 9.56, 11]



ord('i')   ##计算ASCII值

In [22]: s
Out[22]: [1, 2, 3, 'c', 'a']

In [23]: s.sort()

In [24]: s
Out[24]: [1, 2, 3, 'a', 'c']

逆转s[::-1]或者s.reverse

In [15]: s.reverse()

In [16]: s
Out[16]: [11, 9.56, 2]

这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述

这里写图片描述

栈操作
这里写图片描述
这里写图片描述
这里写图片描述

队操作:
这里写图片描述
这里写图片描述
这里写图片描述

字典dict

*字典创建
-赋值创建字典
In [1]: a = {'name1':'passwd1','name2':'passwd2'}
In [3]: a
Out[3]: {'name1': 'passwd1', 'name2': 'passwd2'}

In [4]: servers = {'ssh':22,'ftp':[21,20],'http':[80,8080]}
In [5]: servers
Out[5]: {'ftp': [21, 20], 'http': [80, 8080], 'ssh': 22}

-通过工厂函数创建
In [6]: u = dict(user1='123',user2='234',user3='456')
In [7]: u
Out[7]: {'user1': '123', 'user2': '234', 'user3': '456'}

-通过字典的fromkeys方法创建字典,所有元素有一个默认值
In [8]: {}.fromkeys('westos')    ##如果没有默认值,默认为None
Out[8]: {'e': None, 'o': None, 's': None, 't': None, 'w': None}

In [12]: {}.fromkeys(["name1","name2",'name3'],"123")    ##给每个元素设置默认值为123
Out[12]: {'name1': '123', 'name2': '123', 'name3': '123'}

例:生成多个银行帐号,初始化密码为‘000000#!/usr/bin/env python
#coding:utf-8
stack = []
for i in range(1,100):    ##i=1,2,3,4,5,6....
    a = '610%.3d'%(i)     ##卡号前六为为610,后面依次为001,002..100
    stack.append(a)
print {}.fromkeys(stack,'000000')

这里写图片描述

这里写图片描述

分析字典的特性
*字典不能索引和切片,因为字典是无序的类型:
*不支持重复连接
*支持成员操作符:是判断字典的key值所记否在字典中,in ,not in


-增
通过字典名[key]=value,将key-value添加到字典中
In [1]: services = {'http':[80,80]}    ##key指http,value指 [80,80]

In [2]: services['ftp'] = [20,21]

In [3]: services
Out[3]: {'ftp': [20, 21], 'http': [80, 80]}


updat方法实现添加
In [4]: services = {'http':[80,80]}

In [5]: services.update(ftp=[20,21])

In [6]: services
Out[6]: {'ftp': [20, 21], 'http': [80, 80]}

setdefault实现添加:key存在,不覆盖valueIn [6]: services = {'http':[80,80]}

In [7]: services.setdefault('ftp',21)
Out[7]: 21

In [8]: services 
Out[8]: {'ftp': 21, 'http': [80, 80]}

In [9]: services.setdefault('ftp',20)
Out[9]: 21

In [10]: services
Out[10]: {'ftp': 21, 'http': [80, 80]}


*改
update
*查
In [35]: services
Out[35]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

In [36]: services.keys()     ##给key起名
Out[36]: ['a', 'c', 'b', 'd']

In [37]: services.viewkeys()
Out[37]: dict_keys(['a', 'c', 'b', 'd'])

In [38]: services.iterkeys()
Out[38]: <dictionary-keyiterator at 0x2ca1100>

In [39]: services.values()    ##查看value值
Out[39]: [1, 3, 2, 4]

In [40]: services     ##查看key-value建值队
Out[40]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}


*删
d.pop
In [18]: services   ##固定删
Out[18]: {'ftp': [20, 21], 'http': [80, 80], 'ssh': 22}

In [19]: services.pop('ftp')
Out[19]: [20, 21]

In [20]: services
Out[20]: {'http': [80, 80], 'ssh': 22}

d.popitem()  ##随意删一个
In [22]: services
Out[22]: {'a': 1, 'b': 2, 'c': 3, 'http': [80, 80], 'ssh': 22}

In [23]: services.popitem()
Out[23]: ('a', 1)

In [24]: services.popitem()
Out[24]: ('c', 3)

In [25]: services
Out[25]: {'b': 2, 'http': [80, 80], 'ssh': 22}

del d[key]   ##删除key的字典元素
In [25]: services
Out[25]: {'b': 2, 'http': [80, 80], 'ssh': 22}

In [26]: del services['b']

In [27]: services
Out[27]: {'http': [80, 80], 'ssh': 22}


d.clear()    ##清空
In [27]: services
Out[27]: {'http': [80, 80], 'ssh': 22}

In [28]: services.clear()

In [29]: services
Out[29]: {}

这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述

循环遍历字典

In [31]: services
Out[31]: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

In [33]: for i,j in services.items():
   ....:     print i,j
   ....:     
a 1
c 3
b 2
d 4

#默认情况下便利字典的key值
In [34]: for i in services:
   ....:     print i
   ....:     
a
c
b
d

这里写图片描述

例题:

#!/usr/bin/env python
#coding:utf-8
'''
实现四则运算
-用户分别输入第一个数字,运算操作符,第三个数字
-根据用户的运算操作打印出结果
'''
from __future__ import division    ##进入3.x中,3.x中/输出正确结果,2.x中/不正确
a = input('第一个数字:')
b = raw_input('操作字符:')
c = input('第二个数字:')
d = {
    '+':a+c,
    '-':a-c,
    '*':a*c,
    '/':a/c,
    }
if not b in d:
   print 'error'
else:
   print d[b]

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值