• python基础-02


    常见的数据类型

    列表

    在python中,列表的创建可以是由[]两个方括号组成的。在其他语言中,被称之为数组。

    列表里可以存放一组值,并且系统默认的给列表里的每一个元素以索引值,方便查找和使用。

    如下:

    复制代码
    #创建一个列表,并且保存一定的数据
    
    user_list = ['刘德华','张学友','张靓颖','郭富城','李白']
    
    print(user_list) #['刘德华', '张学友', '张靓颖', '郭富城', '李白']
    
    #根据索引值来读取数据
    print(user_list[0])#刘德华
    复制代码

    我们在实际的应用中,可以非常方便的通过索引值来取出自己想要的值。

    此时,如果需要在列表中取出多个连续的值,可以采用下面的写法:

    复制代码
    1 #创建存储了多个值得列表
    2 
    3 start_list = ['刘德华','张学友','张靓颖','郭富城','李白']
    4 
    5 #此时,需要取出 张学友到郭富城
    6 s_list = start_list[1:4]
    7 
    8 print(s_list)   # ['张学友', '张靓颖', '郭富城']
    复制代码

    在上面的代码中,在取值的时候,我们使用了1:4,索引值从张学友的1到李白的4,但是李白却没有被选取到,此时的原则是顾头不顾尾
    而这样的一种操作,我们称之为切片

    Tip:在进行切片 操作后,并不会改变原本的数组。

    那么从左边开始取值,索引值从0开始,如果从右边开始取值,索引值从-1开始。

    如果需要从右向左取值,有一点需要注意,例如:

    #创建存储了多个值得列表
    
    start_list = ['刘德华','张学友','张靓颖','郭富城','李白']

    想要取值从右向左李白到张靓颖,写法如下:

    n_list = start_list[-3:]
    
    print(n_list)

    从右向左,李白是-1 ,那么将-1省略,要取值到张靓颖,那么张靓颖的索引为-3,那么就写成[-3:] 。

    同理,如果从左向右取值,前面如果是0,也是可以省略的。

    追加

    如果我们需要给列表里面追加一些元素,可以使用append方法,向列表的最后追加一些元素。

    复制代码
    #创建一个列表
    user_list = ['宋小宝','赵四','刘能','小沈阳']
    
    #向列表中追加元素
    
    user_list.append('赵本山')
    
    #检测原列表是否被改变
    print(user_list)
    复制代码

    输出的结果:

    ['宋小宝', '赵四', '刘能', '小沈阳', '赵本山']

    新追加的内容已经被追加到列表的最后。

    如果需要将某个元素插入到某个元素之前,可以使用insert方法。
    如下:

    user_list = ['宋小宝','赵四','刘能','小沈阳']
    
    #将添加的内容添加到赵四的前面
    user_list.insert(1,'赵本山')
    print(user_list)

    结果如下:

    ['宋小宝', '赵本山', '赵四', '刘能', '小沈阳']

    新的数据已经添加成功。

    如果需要修改列表中的某一项,可以直接通过索引值找到元素并且直接赋予新值即可。

    如下:

    user_list[0] = '二人转'

    删除

    如果需要删除列表中的元素,可以采用remove ,del 或者pop方式。

    remove方法:

    复制代码
    #创建一个列表
    user_list = ['测试1','测试2','测试3','测试4']
    
    #使用remove方式删除元素
    user_list.remove('测试1')
    
    print(user_list)
    复制代码

    del方法:

    复制代码
    #创建一个列表
    user_list = ['测试1','测试2','测试3','测试4']
    
    #使用del 方法删除 
    del user_list[1]
    
    print(user_list)
    复制代码

    pop方法:

    复制代码
    #创建一个列表
    user_list = ['测试1','测试2','测试3','测试4']
    
    
    #使用pop方法删除
    user_list.pop()
    
    print(user_list)
    复制代码

    Tip:上面的pop方法此时没有传递参数,会默认的把列表中最后一个值删除,当然,pop()方法中同样接受传入参数[列表的索引值],所以一旦pop传入了索引值,那么它的功能效果就等同于del方法。

    总结

    使用append方法,insert方法

    删除

    使用remove ,del以及pop方法

    直接使用索引值找到元素并且赋予新值

    通过索引值的方式可以查询数据

    我们也可以通过index方法来查询某个元素的在列表中的索引值。

    如下:

    复制代码
    #创建列表
    user_list = ['测试1','测试2','测试3']
    
    index_user = user_list.index('测试2')
    
    print(index_user) # 1
    复制代码

    在列表中,如果想要查看某个元素出现的次数,可以使用count方法

    如下:

    复制代码
    #创建列表
    user_list = ['测试1','测试2','测试3','测试2','测试3']
    
    # 使用count方法统计一个元素在列表中出现的次数
    num = user_list.count('测试2')
    print(num) # 2  表示测试2 出现了两次
    复制代码

    清空列表

    python中清空列表可以使用clear方法

    如下:

    复制代码
    #创建列表
    user_list = ['测试1','测试2','测试3','测试2','测试3']
    #使用clear方法清空列表
    user_list.clear();
    #检查列表是否被清空
    print(user_list) #显示为[] ,说明列表已经被成功清空了
    复制代码

    反转列表

    python中反转列表使用reverse方法

    如下:

    #创建列表
    user_list = ['测试1','测试2','测试3','测试2','测试3']
    #使用reverse方法反转列表
    user_list.reverse()
    print(user_list)

    排序

    python中列表的排序可以使用sort方法

    如下:

    #创建列表
    list = ['2Ceshi2','#Ceshi1','ACeshi3','aCeshi4']
    
    list.sort()
    print(list)

    结果如下:

    ['#Ceshi1', '2Ceshi2', 'ACeshi3', 'aCeshi4']

    那么排序的顺序其实是按照ASCII码的顺序进行排序。

    合并列表

    python中列表可以进行合并,使用extend方法

    如下:

    复制代码
    #创建列表
    list = ['2Ceshi2','#Ceshi1','ACeshi3','aCeshi4']
    #创建第二个列表
    test_list = [1,2,3,4]
    #将第二个列表合并到list列表中
    list.extend(test_list)
    
    print(list,test_list)
    复制代码

    上述代码中,test_list 顺利的被合并到list中,而原本的test_list列表依然存在。

    删除整个列表

    如下:

    del 列表的名字

    复制

    python中,实现列表的复制,可以使用copy方法,而copy方法分为深层复制和浅层复制。

    先来看下浅层复制:

    复制代码
     1 '''
     2     copy()方法 复制
     3 
     4     浅层复制
     5 
     6     列表中还可以存在列表,也可以存在其他的数据类型,而浅层复制指的是仅复制第一层,而第二层列表
     7     中的内容仅复制指向内存地址的指针
     8 '''
     9 
    10 # 创建一个列表
    11 test_list = ['alex','LiBai','Zhangxueyou','Zhaosi']
    12 
    13 test2 = test_list.copy()
    14 
    15 print(test2) #['alex', 'LiBai', 'Zhangxueyou', 'Zhaosi']
    16 
    17 # 更改第一层列表中的某个元素值
    18 test_list[0] = 'hello,world'
    19 
    20 # 检查是否更改成功
    21 print(test_list) # 成功
    22 
    23 #检查test2是否更改第一个元素
    24 print(test2) # 第二个列表没有更改
    复制代码

    此时在上面的代码中,列表test_list第一个值进行了更改,而test2列表复制过来的第一个值则没有更改。

    如果列表test_list中还存在一个列表,在浅层复制的情况下,会出现如下的情况:

    复制代码
    # 创建一个列表 - 并且列表中存在二级的列表
    test_list = ['alex','LiBai','Zhangxueyou','Zhaosi',['Nihao','yanyan']]
    
    test2 = test_list.copy() # 第一个列表已经全部被复制了过来
    
    # 更改第一个列表中子集列表的值
    test_list[4][0] = ['NIHAO']
    
    
    # 查看test2列表是否更改
    print(test2)
    复制代码

    发现此时test2列表已经更改:

    ['alex', 'LiBai', 'Zhangxueyou', 'Zhaosi', [['NIHAO'], 'yanyan']]

    原因是此时的复制是浅层复制,只复制到了第一层,第二层里面的列表并没有进行复制,只是复制了一个指向内存方向的指针。

    深层复制需要引入copy模块

    代码如下:

    复制代码
    import copy
    
    # 创建列表
    list_user = ['alex','libai','zhaobenshan',['yanyan','yuping']]
    
    
    # 进行深层复制
    new_list = copy.deepcopy(list_user)
    
    #print(new_list) # 复制成功
    
    # 更改第一组列表
    list_user[3][0] = "YANYAN"
    
    
    print(list_user)
    print(new_list)
    复制代码

    通过引入copy模块,并且使用deepcopy方法即可实现深层复制

    循环列表

    列表的循环使用for..in 即可。

    代码如下:

    # 创建列表
    test_list = ['alex','libai','shaopengtao','wangmengchan']
    
    for i in test_list:
        print(i) # 循环成功

    补充:代码切片

    我们在打印列表的时候,可以使用切片的方式,例如

    test_list = ['alex','libai','shaopengtao','wangmengchan']

    有这样的一个列表,然后现在想将列表0到-1的位置进行切片,

    print(0:-1)

    那么此时如果想要在切片的基础上进行每两个选取一个,代码可以写成如下:

    print(0:-1:2)

    那么最终实现的效果如下:

    ['alex', 'shaopengtao']

    那么在切片的过程中,如果开始或者结束的位置是0或者-1是可以被省略的,所以上面的代码就变成了如下:

    print(::2)

    结果同样是不变的。

    知识点补充和总结:

    上面我们说到,浅层复制的使用,其实在实际应用的情景下大概有三种方式可以实现浅层复制,例如下面的演示代码,将演示三种浅层复制的情况:

    复制代码
     1     import copy
     2     # 创建列表
     3     test_list = ['name',['deposit',100]]
     4 
     5     '''
     6     实现浅层复制的三种写法:
     7 
     8     copy方法
     9     [:]
    10     list
    11     '''
    12     '''
    13     # 第一种方式,使用copy.copy
    14     new_list = copy.copy(test_list)
    15     print(new_list)
    16     '''
    17     '''
    18     #第二种方式
    19     new_list = test_list[:]
    20     print(new_list)
    21     '''
    22 
    23     #第三种方式
    24     new_list = list(test_list)
    25     print(new_list)
    复制代码

    浅层复制的应用

    例如,夫妻之间有一个共同的银行账户,里面有着共同的财产,其中一个人取钱或者存钱,那么另一放的余额显示肯定是要更改的。

    代码如下:

    复制代码
    # 创建列表,演示夫妻共用一个银行账户的需求
    
    money = ['name',['deposit',2000]]
    
    # 创建两个不同的人
    libai = money[:]
    yanyan = money[:]
    
    #此时当丈夫libai 取了1000块
    libai[0] = 'LiBai'
    libai[1][1] = 2000 - 1000
    
    yanyan[0] = 'Yanyan'
    
    # 此时无论是丈夫libai还是妻子yanyan的银行存款余额都会变少,因为二人共用一个账户
    print(libai)
    print(yanyan)
    复制代码

    说的简单点,就是通过浅层复制来实现共享账号,当然,上面的应用只是简单的举个例子,在实际中,银行也不会将数据存储在列表中。

    元组(tuple)

    元组其实类似于列表,也就是存一组数,只不过它一旦创建,便不能再次修改,所以又叫做只读列表。

    元组本身只能切片和查询但是不能够更改。

    代码如下:

    names = ('Alex','Libai','Jack')

    在元组这个对象里面,只有两个方法,一个是count,一个是index。

    小练习:购物车

    需求:

    代码如下:

    复制代码
     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 # Author:Li Bai
     4 
     5 # 创建列表
     6 product_list = [
     7     ('Iphone',5800),
     8     ('Mac Pro',9800),
     9     ('Bike',800),
    10     ('Watch',10600),
    11     ('Coffee',31),
    12 ]
    13 
    14 # 创建一个空列表,用来存储用户购买的商品
    15 shopping_list = []
    16 
    17 salary = input('Input your Salary:')
    18 # 判断用户输入的是否是数字
    19 if salary.isdigit():
    20     # 将用户输入的转换为int整型
    21     salary = int(salary)
    22     # 循环输出列表
    23     while True:
    24         # 输出商品列表中的内容和索引值
    25         for index,item in enumerate(product_list):
    26             # 输出
    27             print(index,item)
    28         user_choice = input('你好,请输入购买的商品序号:')
    29         # 判断用户输入的是否为序号数字
    30         if user_choice.isdigit():
    31             user_choice = int(user_choice)
    32             # 判断用户输入的商品序号是否是合理的
    33             if user_choice < len(product_list) and user_choice >= 0:
    34                 print(user_choice)
    35                 p_item = product_list[user_choice]
    36                 # 判断用户的财产是否足够
    37                 if p_item[1] <= salary: # 买的起
    38                     shopping_list.append(p_item) # 将用户选取的商品存进shopp_list列表
    39                     salary -=p_item[1] # 将财产减去购买的商品列表
    40                     # 打印财产余额
    41                     print("Add %s into shopping cart ,your current balance is %s" %(p_item,salary))
    42                 else :
    43                     print('你的余额只剩%s,余额不足'% salary)
    44             else :
    45                 print("product code [%s] is not exist!"% user_choice)
    46         elif user_choice == 'q':
    47             print("--------shopping list------")
    48             for p in shopping_list:
    49                 print(p)
    50             print("Your current balance:",salary)
    51             exit()
    52         else:
    53             print("invalid option")
    复制代码
  • 相关阅读:
    ZOJ 1217 eight
    COJ 1080 A simple maze
    八数码(双向广搜)
    HDOJ 1043 eight
    [HDOJ] 小兔的棋盘
    ZOJ 2110 Tempter of the Bone
    POJ 2406 Power Strings
    [HDOJ] goagain的超级数列
    COJ 1216 异或最大值
    八数码(IDA*)
  • 原文地址:https://www.cnblogs.com/yujihaia/p/7468267.html
Copyright © 2020-2023  润新知