Python之列表、元组、集合与字典

一、python列表

1、列表的创建
1、列表:可以存储任意数据类型的集合
2、列表里:可以存储不同的数据类型
li = [1,1.2,True,'hello']
print li
print type(li)

3、列表里面也可以嵌套列表(列表:也是一种数据类型)
li = [1,1.2,True,'hello',[1,2,3,4,5]]
print li
print type(li)
2、列表的特性
# 索引
print service[0]
print service[-1]

# 切片
print service[::-1] # 倒序
print service[1:] # 除了第一个不显示
print service[2:] # 除了前两个不显示
print service[:-1] # 除了最后一个不显示
print service[:3] # 显示前三个

# 重复
print service * 3

# 连接
service1 = ['mysql','firewalld']
print service + service1

# 成员操作符
print 'firewalld' in service
print 'firewalld' in service1
print 'firewalld' not in service

#for循环
print 'PYTHON'.center(50,'*')
for se in service:
    print se

#列表里嵌套列表----------
service2 = [['http',80],['ssh',22],['ftp',21]]

#索引----------
print service2[0][1]
print service2[-1][1]

#切片----------
print service2[:][1]      
print service2[:-1][0]
print service2[0][:-1]

列表练习1:

假定有下面这样的列表:
    names = ['fentiao', 'fendai', 'fensi', 'apple']
    输出结果为:'I have fentiao, fendai, fensi and apple.'

代码:
names = ['fentiao', 'fendai', 'fensi', 'apple']
print 'I have ' + ','.join(names[:-1]) + ' and ' + names[-1]
3、列表的操作
--------1.列表的增加--------------------------------

service = ['fttp','ssh','ftp']

1print service + ['firewalld']

2,service.append('firewalld')   #append 追加一个元素到列表中

3,service.extend(['mysql','firewalld'])  ##extend 拉伸 追加多个

4,service.insert(1,'samba')      ##insert:在指定索引位置插入元素




----------2.列表的删除-----------------------------

1,如果pop()不传递值时,默认弹出最后一个元素
print service.pop()
print service.pop(0)   ##弹出第一个元素

2,remove:删除指定元素
service.remove('ssh')

3,del: 关键字 从内存中删除列表
print service    ##显示
del service
print service    ##报错

--------3.列表的修改-----------------------

1,通过索引重新赋值
service[0]='mysql'

2,通过切片重新赋值
service[:2]=['samba','firewalld']   ##把前两个换掉


--------4.列表的查看-----------------------

service = ['http', 'ssh', 'ftp','ftp']

1,查看列表中元素出现的次数
print service.count('ssh')

2,查看指定元素的索引值
print service.index('ssh')



--------5.列表的排序------------------------

service = ['http', 'ssh', 'ftp','ftp']

1,按照ASCII码进行排序
service.sort()
print service

2,service.sort(reverse=True)   ##降序
print service

3,phones = ['bob', 'harry', 'Lily', 'Alice']
# phones.sort()
# phones.sort(key=str.lower)  ##对字符列表不区分大小写
phones.sort(key=str.upper)
print phones

列表练习2:

import random
li = list(range(10))
print li
# 将原有的列表顺序打乱
random.shuffle(li)
print li

列表练习3:
用户管理系统

users = ['root', 'westos']
passwds = ['123', '456']

for i in range(3):
            user = raw_input('请输入用户名:')
            passwd = raw_input('请输入密码:')
            if user in users:
                j=user.index(user)
                if passwd == passwds[j]:
                    print '登陆成功'
                    break
                else:
                        print '登陆失败'
                        print '请重新登陆,您还有%d次机会'%(2-i)
            else:
                print '用户不存在,请重新登陆'
else:
    print '三次机会已经用完'

列表练习4:后台管理前台用户信息

print '管理员登陆'.center(50, '*')

inuser = raw_input('用户名:')
inpasswd = raw_input('密码:')

users = ['root', 'westos']
passwds = ['123', '345']

if inuser == 'admin' and inpasswd == 'admin':
    print '管理员登陆成功'
    print '用户信息管理'.center(50, '*')
    while True:
        print  """
        1 -添加用户信息
        2 -删除用户信息
        3 -查看用户信息
        4 -退出

        """
        choich = raw_input('请选择你的操作:')

        if choich == '1':
            print '添加用户信息'.center(50, '*')
            addUser = raw_input('添加用户:')
            if addUser in users:
                print '用户%s已经存在' % addUser
            else:
                addPasswd = raw_input('密码:')
                # 把用户名和密码添加到列表中
                users.append(addUser)
                passwds.append(addPasswd)
                print '添加用户%s 成功' % addUser

        elif choich == '2':
            print '删除用户信息'.center(50, '*')
            deluser = raw_input('请选择需要删除的用户:')
            if deluser in users:
                j = users.index(deluser)
                delpasswd = passwds[j]
                users.remove(deluser)
                passwds.remove(delpasswd)
                print '%s用户删除成功' % deluser
            else:
                print '用户不存在'


        elif choich == '3':
            print '查看用户信息'.center(50,'*')
            userCount = len(users)  # 2
            print '\t用户名\t密码'
            for i in range(userCount):  # 0 ,1
                print '\t%s\t%s' %(users[i],passwds[i])

            catuser = raw_input('请输入想要查看的用户:')
            if catuser in users:
                j = users.index(catuser)
                catpasswd = passwds[j]
                print '用户名:%s   密码: %s' % (catuser, catpasswd)
            else:
                print '没有此用户信息'

        elif choich == '4':
            exit()

        else:
            print '请输入正确的选择'
else:
    print '管理员登陆失败!'

二、python元组

1、元组的创建
1、元组(tuple):带了紧箍咒的列表
元组本身不可变数据类型,没有增删改查
元组内可以存储任意数据类型
t = (1, 2, 3, 4.0, 'star')
print t, type(t)
(1, 2, 3, 4.0, 'star') <type 'tuple'>

2、元组里面包含可变数据类型,可以间接修改元组的内容
t1 = ([1,2,3],4)
t1[0].append(4)
print t1

([1, 2, 3, 4], 4)

3、元组如果只有一个元素的时候,后面一定要加逗号,否则数据类型不确定
t2 = ('hello',)
t3 = (1,)
print type(t2),type(t3)
2、元组的特性
allowUsers = ('z', 'x', 'y')
--------索引----------
print allowUsers[0]
print allowUsers[-1]

--------切片----------
print allowUsers[1:]   #除了第一个,其他输出
print allowUsers[2:]      #除了第二个,其他输出
print allowUsers[:-1]   #除了最后一个,其他输出
print allowUsers[:3]    #输出前三个
print allowUsers[::-1]

---------重复----------
print allowUsers * 3

---------连接----------
print allowUsers + ('a', 'b')

----------成员连接符----------
print 'westos' in allowUsers
print 'westos' not in allowUsers
3、元组的应用场景
---------1.交换变量值---------------
a = 1
b = 2
b,a = a,b
#先把(a,b)封装成一个元组(1,2)
#b,a = a,b
#b=(1,2)[0]  a=(1,2)[1]
print a,b


---------2.打印变量值---------------
name = 'westos'
age = 10
t = (name,age)
print 'name: %s,age: %d' %(name,age)
print 'name: %s,age: %d' %t

----------3.元组的赋值---------------
有多少个元素就要用多少个变量接收
t = ('westos',10,100)
name,age,score = t
print name,age,score

----------4.元组的排序----------------
scoresLi = list(scores)   ##转化为list之后排序
scoresLi.sort()
print scoresLi

scores = sorted(scores)   ##python自带的排序
print scores

三、python集合

1、集合的定义
# 集合里面的元素是不可重复的
s = {1,2,3,1,2,3,4,5}
print s,type(s)
s1 = {1}
print s1,type(s1)
# 如何定义一个空集合
s2 = {}
print type(s2)  ----{} <type 'dict'>
s3 = set([])
print s3,type(s3)  ----set([]) <type 'set'>

# 集合的应用(列表去重)
li = [1,2,3,1,2,3]
print list(set(li))
2、集合的特性
不支持索引 切片 重复 连接
只支持成员操作符 和 for循环  

s={1,2,3}
print 1 in s     #成员操作符
True

for i in s:      #for循环
    print i,

for i,v in enumerate(s):   #枚举可以列出索引值i
    print 'index: %s,value:%s' %(i,v)
-----------Python中常用的内置方法-----------------
# 枚举:返回索引值和对应的value值

for i,v in enumerate('hello'):
    print i
    print type(i)
    print v
    print type(v)
    print str(i) + '---->' + v
    print i, v

s1 = 'abc'
s2 = '123'

for i in zip(s1,s2):
    #print i
('a', '1')
('b', '2')
('c', '3')
    print '-'.join(i)
a-1
b-2
c-3
3、集合的方法
s = {6,7,8,1,2,3}
#增加
s.add(10)
s.add(9)
print s   #并排序

#增加多个元素
s.update({4,5})
print s   #并排序

#删除
print s
s.pop()   ##删除1
print s

#删除指定元素
s.remove(3)
print s


#交集 并集 差集

s1 = {1,2,3}
s2 = {2,3,6}
#交集
print '交集:',s1.intersection(s2)
print '交集:',s1&s2

#并集
print '并集:',s1.union(s2)
print '并集:',s1 | s2

#差集
#可以理解为s1中有哪些s2中没有的元素
print '差集:',s1.difference(s2)    #s1-(s1&s2)
print '差集:',s1 - s2
#可以理解为s2中有哪些s1中没有的元素
print '差集:',s2.difference(s1)    #s2-(s2&s1)
print '差集:',s2 - s1

s3 = {1,2}
s4 = {1,2,3}
#s3是否为s4的子集
print s3.issubset(s4)

#s3是否为s4的超集
print s3.issuperset(s4)


##两个集合是不是相交
print s3.isdisjoint(s4)

集合练习1:

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性
他先用计算机生成了N11000之间的随机整数(N<=1000),N是用户输入的,对于
其中重复的数字,只保留一个,把其余相同的数字去掉,不同的数对应着不同的学生的学号,然后再把这些数从小到大排序,按照排好的顺序去找同学做调查,请你协助明明完成“去重”与排序工作
import random
# 先 生成n个随机数
# 优先选择集合
s = set([])
for i in range(int(raw_input('N:'))):
    # num = random.randint(1,1000)
    # s.add(num)
    s.add(random.randint(1,1000))
print s
print sorted(s)
N:4
set([644, 493, 22, 477])
[22, 477, 493, 644]

四、python字典

1、字典的定义
字典是一个无序的数据集合,
使用print输出字典的时候
通常输出的顺序和定义的顺序是不一致的
定义方式一:

message = {
    'name':'tom',
    'age':18,
    'height':1.80,
    'weight':75.5
}               
#注意冒号和逗号
print message

定义方式二:
s = {}
print type(s)
s = {
    'fentiao':[100,90,80],
    'westos':[199,199,199]
}
print s

定义方式三
d = dict()
print d,type(d)

d = dict(a=1,b=2)
print d,type(d)
2、字典的特性
d = dict(a=1,b=2)
print d

# 成员操作符(默认判断key值是否存在)
print 'a' in d
print 1 in d

# for循环(默认循环遍历字典的key值)
for i in d:
    print i
3、字典的操作
---------1、字典的增加或更改----------
添加或者更改key的值
d = dict(a=1,b=2,c=3,d=4)
d['g'] = 10  #添加
print d
d['a'] = 10  #更改
print d
{'a': 10, 'c': 3, 'b': 2, 'd': 4, 'g': 10}

"""
update:
    如果key值存在,更新value值
    如果key值不存在,添加key-value值
"""
d.update({'a':4,'f':1})
print d
{'a': 0, 'c': 3, 'b': 2, 'd': 4, 'f': 7}

"""
setdefault
    如果key值已经存在,不做修改
    如果key值不存在,添加key-value值
"""
d.setdefault('a',10)
print d
{'a': 1, 'c': 3, 'b': 2, 'd': 4}

----------2、字典的删除------------

d = dict(a=1,b=2,c=3)
d.pop('a')   ##弹出指定key的value值
d.popitem()  ##删除第一个
del d['a']   ##直接删除
print d


----------3、字典的修改和查看------------
service = {
    'http': 80,
    'mysql': 3306
}

# 查看字典里面的所有key值
print service.keys()

# 查看字典里面的所有value值
print service.values()

# 查看字典里面的所有key-value值
print service.items()

-------4、字典的遍历------

service = {
    'http': 80,
    'mysql': 3306
}

for k,v in service.items():
    print k,'----->',v

for k in service:
    print k,'----->',service[k]

#用get简化
print service['https']
if 'https' in service:
   print service['https']
else:
   print 'key not exist'

"""
get 方法获取指定key对应的value值
    如果key值存在,返回对应的value值
    如果key值不存在,默认返回None,如果需要指定返回值,传值即可
"""
print service.get('http','key not exist')

字典练习1:

"""
重复的单词: 此处认为单词之间以空格为分隔符, 并且不包含,和.;
     1. 用户输入一句英文句子;
     2. 打印出每个单词及其重复的次数;
 "hello java hello python"
 hello 2
 java 1
 python 1
"""

s = raw_input('s:')
# 1.把每个单词分割处理
s_li = s.split()
print s_li

# 2.通过字典存储单词和该单词出现的次数
words_dict = {}

# 3.
"""
依次循环遍历列表
    如果列表元素不在字典的key中,将元素作为key 1作为valus值
    如果列表元素在字典的key中,直接更新元素value值,在原有的基础上加1
"""
for item in s_li:
    if item not in words_dict:
        words_dict[item] = 1
    else:
        words_dict[item] += 1

# 4.打印生成的字典
print words_dict
"""
 数字重复统计:
    1). 随机生成1000个整数;
    2). 数字的范围[20, 100],
    3). 升序输出所有不同的数字及其每个数字重复的次数;
"""

import random
# 1.随机生成1000个整数
all_nums = []
for item in range(1000):
    # 2.数字的范围
    all_nums.append(random.randint(20, 100))

# 3.升序输出所有不同的数字及其每个数字重复的次数
sorted_num = sorted(all_nums)

nums_dict = {}
for num in sorted_num:
    if num in nums_dict:
        nums_dict[num] += 1
    else:
        nums_dict[num] = 1

print nums_dict

猜你喜欢

转载自blog.csdn.net/qq_37048504/article/details/82429709