Python_day_02_列表

本文详细介绍Python中列表的各种操作,包括定义、索引、切片、重复、连接等基础操作,以及成员操作、添加、修改、查看、删除等高级操作。此外,还介绍了队列和栈的基本操作,并解释了is与==的区别、深拷贝与浅拷贝的概念。

1.列表的定义

• 定义一个空列表
list = []
• 定义一个包含元素的列表,元素可以是任意类
型,包括数值类型,列表,字符串等均可。

list = ["fentiao", 4, 'gender']
list1 = ['fentiao',(4,'male')]

2.列表的索引

•下标是从0开始计算,比如list[0]读取的是列
表的第1个元素;
•list[-1]读取的是列表的倒数第1个元素;


a = ["fentiao","fensi","fendai"]
a[1]
a[-2]

3.列表的切片

• 0代表从哪个索引开始切片;
• 3代表切片到哪个位置,并且不包含第三
个索引;
• 2代表切片的步长;

a = [“fentiao”,”fensi”,”fendai”]

a[0:2]
a[0:2:2]
a[::-1]

4.列表的重复

li*3

5.列表的连接

li+list

6.成员操作符

root in li

7.列表的添加

列表可通过append方法添加元素; ##添加到列表最后面

a = ["1","2","3","4"]
a.append("5")

列表可通过方法添加元素;

a = ["12","34"]
b = ["33","11"]
a.extend(b) ##多行加入

在指定位置添加元素使用inert方法; ##添加在指定索引的前面

L.insert(index, object)


a.insert(1,5)

8.列表的修改

• 修改列表的元素:直接重新赋值;

a = ["12","34","56"]
a[0] = "11"

9.列表的查看

查看某个列表元素的下标用index方法;

a.index("12")

查看某个列表元素出现的次数用count方法;

a.count("12")

10.列表的删除

1) 删除列表中最先出现的值,不存在,则报错;

allow_ip.remove('172.25.254.1')
print allow_ip

2) del(list[])删除列表中的指定下标

3) pop是删除指定索引的值;如果列表为空或者索引不在范围内,则报错; 如果不指定索引值,默认删除最后一个元素;

allow_ip.pop()

反转列表

allow_ip.reverse()

列表排序

allow_ip.sort()
print allow_ip

内置函数

1) cmp() ##比较

2) max() ##最大

3) min() ##最小

4) enumerate() ##枚举

5) zip() ##配对

s = 'abc'
s1 = '123'
print zip(s,s1)

6) sum() ##求和

7) len() ##求长度

8) abs() ##返回绝对值

队列的建立(queue)

import queue

queue.Queue
queue = []
info = """
        队列操作
  1.添加队列元素
  2.删除队列元素
  3.队长度
  4.对头元素
  5.队尾元素
  6.退出
  """
print info
while 1:
    choice = raw_input('请输入你的选择:')

    if choice == '1':
        in_value = raw_input('添加队列的元素:')
        queue.append(in_value)
        print "元素%s添加成功!" %(in_value)
        print queue
    elif choice == '2':
        if queue:
            #queue1 = queue[::-1]
            out_value = queue.pop(0)
            print "%s删除成功!" %(out_value)
            print queue
        else:
            print "队列为空"
    elif choice == '3':
        print "队长度:%s" %(len(queue))
    elif choice == '4':
        if queue:
           print "对头元素为: %s" %(queue[0])
        else:
            print "队列为空"
    elif choice == '5':
        if queue:
           print "队尾元素为: %s" %(queue[-1])
        else:
            print "队列为空"
    elif choice == '6':
        exit(0)
    else:
        print "error"

栈的建立(stack)

stack = []

info = """
            栈操作


    1. 入栈
    2. 出栈
    3. 栈长度
    4. 栈顶元素
    5. 退出
"""
print info

while 1:
    choice = raw_input('清输入你的选择:')

    if choice == '1':
        in_value = raw_input('入栈元素:')
        stack.append(in_value)
        print  "元素%s入栈成功!" % (in_value)
        print stack
    elif choice == '2':
        # if stack != []:   判断列表是否为空;
        if stack:
            out_value = stack.pop()
            print "%s 出栈成功!" %(out_value)
            print stack
        else:
            print "栈为空!"
    elif choice == '3':
        print "栈长度为%d" %(len(stack))
    elif choice == '4':
        # if stack != []:   判断列表是否为空;
        if stack:
            print "栈顶元素为: %s" %(stack[-1])
        else:
            print "栈为空!"
    elif choice == '5':
        exit(0)
    else:
        print "请输入正确的选择!"

is和==的区别

一定要在交互式环境测试;

a = 'hello'
b = 'hello'
print id(a),id(b)

字符串驻留机制;
  - 对于较小的字符串, id相同;
  - 对于较长的字符串, id不相同, 因为不会驻留字符串的副本;
c = 'hello java world'
d = 'hello java world'
print id(c), id(d)
print c is d

e = 'python'
f = "".join(['p', 'y', 't', 'h', 'o', 'n'])
print id(e), id(f)

结论:
is表示的是对象标识符;表示两个变量的值是否在同一块内存空间;
==表示的是值是否相等;
总结: is返回值为True, ==返回一定是True;

深拷贝和浅拷贝

1) 直接赋值, 只是把新的变量指向li的内存空间, 没有复制;当li改变, li1也随之改变;
>>> li = [1, 2, 3]
>>> li1 = li
>>> id(li)
140580753414048
>>> id(li1)
140580753414048
2) 浅拷贝: 拷贝出一份副本, 但是没有拷贝子对象(列表里面的列表对象);不完全拷贝
#       - 切片li[:]
#       - copy.copy()

>>> li1 = li[:]
>>> id(li), id(li1)
(140580753414048, 140580753253440)



>>> li = ['fentiao', 'zhurou', ['fensi', 'fendai']]
>>> li1 = li[:]
>>> id(li), id(li1)
(140580753414192, 140580753414048)
>>> li
['fentiao', 'zhurou', ['fensi', 'fendai']]
>>> li1
['fentiao', 'zhurou', ['fensi', 'fendai']]
>>> id(li[-1]), id(li[-1])
(140580753340464, 140580753340464)
>>> id(li[-1]), id(li1[-1])
(140580753340464, 140580753340464)
>>> import copy
>>> li2 = copy.copy(li)
>>> id(li), id(li1), id(li2)
(140580753414192, 140580753414048, 140580753498840)
>>> id(li[-1]), id(li1[-1]), id(li2[-1])
(140580753340464, 140580753340464, 140580753340464)
3) 深拷贝: 里面的所有对象重新拷贝, 包括子对象;
>>> li3 = copy.deepcopy(li)
>>> id(li[-1]), id(li1[-1]), id(li3[-1])
(140580753340464, 140580753340464, 140580753461976)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值