python列表操作

列表

列表的定义
  1. 列表是一个容器, 可以存储不同数据类型的数据;
  2. 列表里面可以存储列表;
li = [1, 1.0, 1L, 1 + 2j, "hello", [1, 2]]
print li

# 定义一个空列表
li = []
print li, type(li)

li = list()
print li, type(li)

# 删除;列表在内存中的存储;
del li

#打印报错, 因为li已经被删除;
print li

#列表的特性
li = [1, 1.0, 1L, 1 + 2j, "hello", [1, 2]]
索引
#索引
greeting = 'Hello'

# 第一个元素
print(greeting[0])  # H

# 最后一个元素
print(greeting[-1])  # o

# 直接使用字面量
print('Hello'[0])  # H

# 如果函数调用返回一个序列,可以直接对其执行索引操作
fourth = input('Year: ')[3]  # Year: 2020
print(fourth)  # 0

切片

第一个索引包含的是第一个元素的编号 但第二个索引是切片后余下的第一个元素编号 (含头不含尾)

In [1]: tag = '<a href="http://www.python.org">Python web site</a>'

In [2]: tag[9:30]
Out[2]: 'http://www.python.org'

In [3]: tag[32:-4]
Out[3]: 'Python web site'

In [11]: numbers[-3:]
Out[11]: [8, 9, 10]

In [12]: numbers[:3]
Out[12]: [1, 2, 3]

In [13]: numbers[:]
Out[13]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

更大的步长

list[begin:end:step]

# 步长为1
In [14]: numbers[0:10:1]
Out[14]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#步长为2
In [15]: numbers[0:10:2]
Out[15]: [1, 3, 5, 7, 9]

In [16]: numbers[1:10:2]
Out[16]: [2, 4, 6, 8, 10]

In [19]: numbers[::-1]
Out[19]: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

序列相加

不能拼接不同类型的序列

In [20]: [1,2,3] + [4,5,6]
Out[20]: [1, 2, 3, 4, 5, 6]

In [21]: [1,2,3] + [3,4,5]
Out[21]: [1, 2, 3, 3, 4, 5]

乘法
#重复
In [22]: 'python' * 5
Out[22]: 'pythonpythonpythonpythonpython'

In [23]: [42] * 10
Out[23]: [42, 42, 42, 42, 42, 42, 42, 42, 42, 42]

初始化一个长度为10的列表

In [24]: [None] * 10
Out[24]: [None, None, None, None, None, None, None, None, None, None]

成员资格
In [25]: permissions = 'rw'

In [26]: 'w' in permissions
Out[26]: True

In [27]: 'x' in permissions
Out[27]: False

In [28]: users = ['mlh','foo','bar']

In [29]: 'mlh' in users
Out[29]: True


长度、最小值和最大值

len(numbers)
Out[3]: 3
max(numbers)
Out[4]: 678
min(numbers)
Out[5]: 34

列表:Python的主力

函数list
In [1]: list('Hello')
Out[1]: ['H', 'e', 'l', 'l', 'o']
基本的列表操作

修改列表:给元素赋值

In [2]: x = [1,1,1]

In [3]: x[1] = 2

In [4]: x
Out[4]: [1, 2, 1]

删除元素

In [5]: del x[1]

In [6]: x
Out[6]: [1, 1]

给切片赋值

In [7]: name = list('Perl')

In [8]: name
Out[8]: ['P', 'e', 'r', 'l']

In [9]: name[2:] = list('ar')

In [10]: name
Out[10]: ['P', 'e', 'a', 'r']

# 在不替换原有元素的情况下插入新元素
In [11]: numbers=[1,5]

In [12]: numbers[1:1]
Out[12]: []

In [13]: numbers[1:1]=[2,3,4]

In [14]: numbers
Out[14]: [1, 2, 3, 4, 5]

#采用翔安
列表的增删改查

append

allow_users = ['user1', 'user2', 'user3']

# append:追加, 追加一个元素到列表最后;
allow_users.append('user4')
print allow_users


# extend: 追加多个元素到列表最后;
jishu_groups = ['jishu1', 'jishu2', 'jishu3']
allow_users.extend(jishu_groups)
print allow_users


# insert:插入, 把元素插入到列表指定的索引前面;
allow_users.insert(0, 'user5')
print allow_users

#pop  删除并返回列表最后一个元素

In [22]: x=[1,2,3]

In [23]: x.pop()
Out[23]: 3

In [24]: x
Out[24]: [1, 2]

In [25]: x.pop(0)
Out[25]: 1

In [26]: x
Out[26]: [2]


这里写图片描述
clear

In [1]: lst = [1,2,3]

In [2]: lst.clear()

In [3]: lst
Out[3]: []

copy

#浅拷贝
In [4]: a=[1,2,3]

In [5]: b=a

In [6]: b[1]=4

In [7]: a
Out[7]: [1, 4, 3]

#深拷贝
In [8]: a=[1,2,3]

In [9]: b=a.copy()

In [10]: b[1]=4

In [11]: a
Out[11]: [1, 2, 3]

In [12]: b
Out[12]: [1, 4, 3]

count

In [15]: ['to', 'be', 'or', 'not', 'to', 'be'].count('to')
Out[15]: 2

In [16]: x=[[1,2],1,1,[2,1,[1,2]]]

In [17]: x.count(1)
Out[17]: 2

In [18]: x.count([1,2])
Out[18]: 1

index

In [19]:  knights = ['We', 'are', 'the', 'knights', 'who', 'say', 'ni']

In [20]: knights.index('who')
Out[20]: 4

In [21]: knights.index('herring')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-21-ee9b1a4b9dff> in <module>
----> 1 knights.index('herring')

ValueError: 'herring' is not in list

查看

allow_users = ['user1', 'user2', 'user3', 'user1']


print allow_users.count('user1') #查看user1出现的次数
print allow_users.index('user3')	#查看user3的索引

这里写图片描述
修改

allow_users = ['user1', 'user2', 'user3', 'user1']


print allow_users[0]
allow_users[0] = 'user10' #将索引为0的修改为user10
print  allow_users

allow_users[1:3] = ['group1', 'group2'] #将索引为1-3的修改为group1,gruop2
print allow_users

这里写图片描述
删除

allow_users = ['user1', 'user2', 'user3', 'user1']

# 删除列表中的value值, 删除的是遇到的第一个值;
allow_users.remove('user1')
print allow_users


# 默认删除列表的最后一个元素;
print allow_users.pop()
print  allow_users

# 删除列表中的第0个索引
print allow_users.pop(0)
print allow_users

reverse

li = [2, 4, 5,7, 9, 100]
li.reverse()   # 类似于li[::-1]
print li

sort

就地排序,意味着对原来的列表进行修改;

In [28]: x=[2,1,4]

In [29]: x.sort()

In [30]: x
Out[30]: [1, 2, 4]

#排序函数排序

In [33]: y=[2,1,4]

In [34]: z=sorted(y)

In [35]: z
Out[35]: [1, 2, 4]

In [36]: y
Out[36]: [2, 1, 4]

高级排序

In [1]: x = ['aardvark', 'abalone', 'acme', 'add', 'aerate']

In [2]: x.sort(key=len)

In [3]: x
Out[3]: ['add', 'acme', 'aerate', 'abalone', 'aardvark']

In [4]: x.sort(key=len,reverse=True)

In [5]: x
Out[5]: ['aardvark', 'abalone', 'aerate', 'acme', 'add']
列表的嵌套
import pprint

li1 = [
    [1, 2, 3],
    [2, 3, 4],
    [3, 4, 5]
]
li2 = [
    [2, 3, 4],
    [1, 2, 3],
    [1, 2, 3]
]

# numpy,  pandas, matplotlib
result = [
    [0, 0, 0],
    [0, 0, 0],
    [0, 0, 0]
]

#  i : 0, 1, 2
for i in range(len(li1)):
    # j: 0, 1, 2
    for j in range(len(li1[i])):
        # [0][0], [0][1], [0][2]
        # [1][0]
        result[i][j] = li1[i][j] + li2[i][j]
pprint.pprint(result)

这里写图片描述

栈与队列

队列:先进先出 FIFO
栈:先进后出 FILO

对栈的管理

info = """
        栈的管理
    1).入栈
    2).出栈
    3).获取栈定元素
    4).栈长度
    5).栈是否为空
    6).退出
"""
stack = []
print  info
while True:
    choice = raw_input("\n请输入选项:")
    if choice == '1':
        item =raw_input("请输入你要添加的元素:")
        stack.append(item)
        print "入栈成功!"
    elif choice == '2':
        if not stack: #判断是否为空 默认返回布尔值
            item = stack.pop()
            print "%s出栈成功" %(item)
        else:
            print "栈为空!!"
    elif choice == '3':
        if stack !=[]:
            print "栈顶元素为:", stack[-1]
        else:
            print "栈为空"
    elif choice == '4':
        print "栈的长度为:", len(stack)
    elif choice == '5':
        if stack:
            print stack
            print "栈不为空,栈的元素为:",
            for i in stack:
                print i,
        else:
            print "栈为空!"
    elif choice == '6':
        exit()
    else:
        print '请输入正确的选项!'
_is和==的区别
  • is:表示的是对象标识符;表示两个变量的值是否在同一块内存空间;

  • ==:表示的是值是否相等;
    注:小整数在内存中已经存好的,所以不用再占用别的内存空间。而比较大的整数没有在内存中储存。
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

深拷贝与浅拷贝
li = [1,2,3,4]
#

# 不是拷贝, 是将li1的指向li的内存位置;
li1 = li
print(li1 is li)
浅拷贝

切片方法进行浅拷贝

li2 = li[:]
print(li2 is li)
li2.append(5)
print(li)
print(li2)

这里写图片描述

不能将列表中嵌套的数据类型拷贝出来,只能重新定义一个指向,指向原来的嵌套中的数据类型

li = [1, 2, 3, [2, 3]]

li3 = li[:]
print(li3 is li)
print(li3[-1][0] is li[-1][0])

导入模块进行拷贝

import copy

li = [1, 2, 3, [2, 3]]
li3 = copy.copy(li)

print(li3 is li)
print(li3[-1] is li[-1])

-

深拷贝

将拷贝对象的所有元素都拷贝出来,放进别的内存空间,而不像浅拷贝,只拷贝指向

import copy
li = [1, 2, 3, [2, 3]]
li4 = copy.deepcopy(li)


print(li is li4)
print(li[-1] is li4[-1])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值