05-4 数据类型—list

list

list列表是Python内置的一种数据类型,是一种有序的集合。

 

一、创建list

names = ['jack', 'alex', 'james', 'rick', 'maggie'] 
names2 = list([1, 3, 5, 7])    # 实例化对象。自动执行list类中的__init__方法 内部执行for循环(1, 3, 5, 7)

 

二、操作

1、查

(1)关于索引

按索引从list中定位值,有正向和负向两套索引:

          ['jack',  'alex',  'james',  'rick',  'maggie']

索引1:      0        1          2         3           4

索引2:     -5      -4         -3        -2         -1

names[3]                        #取列表中第4个值。内部实际上是去执行list对象的__getitem__方法。
names[-1]                       #取列表中的最后一个值
names.index('james')            #查找列表中第一个james这个元素的索引值

 (2)切片操作

names[ 开始位置 : 结束位置 :步长 ]

可切出一个新的列表(哪怕只是一个值,其类型也是列表)。遵循“顾头不顾尾”原则

names[:]                        #取列表的所有内容,也可进一步简写为names
names[1:3]                      #取列表中第2位——第4位的值,不包含第4位。
names[:-2]                      #取列表中首位——倒数第2位的值,不包括倒数第2位
names[-3:]                      #取列表中倒数第3位——最后一位的值,且包括最后一位
names[1:100]                    #给的下标超值过实际列表最后一位下标的值时,取第2位——最后一位,包含最后一位
names[1:100:2]                  #从第2位起,以2为步长取列表中的值,就是跳着切。没写加步长时,默认步长值为1
names[3:0:-1]                   #步长为负号时,倒着走。同样遵循“顾头不顾尾”原则,只是这时头在右边,尾在左边

 

2、增

names.append('mike')            #在列表尾部追加新的对象
names.insert(1, 'bob')          #把bob插入到第2个位置,原有的第2位及之后的内容顺次后移
names.extend(names2)            #在列表names的尾部一次性追加names2的多个值,names成为新列表,而names2不变 

 

3、改

names[2] = 'judice'             #把第3个位置的元素改成judice。内部实际上是去执行list对象的__setitem__方法。
names[1:3] = ['a', 'b']         #将第2位、第3位(不含第4位)的值分别改为'a'、'b'

 

4、删

names.remove('mike')            #通过值,把'mike'从列表中删除
names.pop(2)                    #通过索引,删除列表中的第3位的值,且返回该删除值(可赋值给变量)。pop()默认最后一个位
names.clear()                   #清空列表,危险操作,请慎用
del names[2:5]                  #把第3、4、5位的值删除。内部实际上去执行list对象的__delitem__方法
del names                       #直接删除names这个对象

 

5、其他

names.count(9)                  #查询names中有几个9
names3 = names + names2         #names和names2的值合并成新列表,并赋值给新列表names3。names、names2不变
names.reverse()                 #把列表反转,就是把原有顺序完全反过来了。通过内置函数reversed(names)能返回顺序翻转后的列表。
names.sort()                    #把列表永久性的排序。sort(reverse = True)为从大到小排序,reverse参数默认值为False
sorted(names)                   #对列表进行临时性的排序,用于将结果传给变量
len(names)                      #确定列表的元素个数
'Jack' in names                 #判断names中是否存在元素9,若存在返回True,反之False

 

names2 = names.copy()           #浅拷贝:复制列表names。只copy第一层。(列表中的列表属于第二层....)

import copy
names2 = copy.deepcopy(names)   #深拷贝:完全copy,包括里面所有的层。

 

6. 补充

 列表生成式:列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。

L = []
for i in range(1, 10):
    L.append(i)
print(L)     # [1, 2, 3, 4, 5, 6, 7, 8, 9]

 

l = [x*x for x in range(8)]               # 把要生成的元素 x*x 放到前面,后面跟for循环
print(l,type(l))                          # 屏幕输出:[0, 1, 4, 9, 16, 25, 36, 49] <class 'list'>
 
L = ['Hello', 'World', 'IBM', 'Apple']
l5 = [s.lower() for s in L]               # 要生成的元素处使用函数
print(l5)                                 # 屏幕输出:['hello', 'world', 'ibm', 'apple']
 
#还可以加if
l2 = [x*x for x in range(8) if x%2 == 0] 
print(l2)                                 # 屏幕输出:[0, 4, 16, 36]
 
#还可以使用两层循环
l3 = [m+n for m in 'ABC' for n in 'XYZ'] 
print(l3)                                 # 屏幕输出:['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
 
#还可以使用两个变量
d = {'x': 'A', 'y': 'B', 'z': 'C' }
l4 = [k + '=' + v for k, v in d.items()] 
print(l4)                                 # 屏幕输出:['x=A', 'y=B', 'z=C']

   

tuple

一、创建元组

1、什么是元组

元组被称为只读列表,即数据可以被查询,但不能被修改,所以,列表的切片操作同样适用于元组。元组写在小括号 ( ) 里,元素之间用逗号隔开。

 

2、作用

  •  对于一些数据我们不想被修改,可以使用元组;
  •  另外,元组的意义还在于,元组可以在映射(和集合的成员)中当作键使用——而列表则不行;元组作为很多内建函数和方法的返回值存在。

 

3、其他点

  • 构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
tup1 = ()                       # 空元组
tup2 = (20,)                    # 一个元素,需要在元素后添加逗号
  • 虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表
t = (11, 22, ["alex", "john", "jack"])
t[2][1] = "rick"
print(t)

--------------打印结果----------------
(11, 22, ['alex', 'rick', 'jack']
  •  使用的是逗号来生成一个元组:
a = 1, 2, 3
print(a)      # (1, 2, 3)

 

product_list = [('iphone', 5800),                         #使用嵌套
                ('macbook', 9000),
                ('coffee', 30),
                ('pythonbook', 80),
                ('bicycle', 1500)]

saving = input('请充值:')

choice_list = []

if saving.isdigit():                                       #判断输入是否合法
    saving = int(saving)

    while True:
        for i, v in enumerate(product_list, 1):             #enumerate()给对象编号。第二参数可设置起始数字,默认为0
            print(i, v)

        choice = input('请输入选择的产品编号[按q退出]:')

        if choice.isdigit():
            choice = int(choice)
            if choice > 0 and choice <= len(product_list):  #len(product_list)保证能随product_list的增删动态变化
                item = product_list[choice-1]
                if item[1] <= saving:
                    saving = saving - item[1]
                    choice_list.append(item)
                    print("已将%s加入购物车,您的余额为%d元"%(item[0], saving))
                else:
                    print('余额不足!')
            else:
                print('编号错误!')

        elif choice == 'q':
            print('您已经选择如下产品:')
            for i, v in enumerate(choice_list):
                print(i, v)
            print('您的余额为:', saving)
            break
        else:
           print('输入错误,请您输入产品编号 ')

else:
    print('Invalid input !')
购物车
def show_shopping_car(choice_list, saving):
    print('您已经购买的商品如下'.center(50, '*'))
    for i, v in enumerate(choice_list, 1):
        print('\033[35;1m %s:  %s \033[0m' % (i, v))
    expense = 0
    for i in choice_list:
        expense += i[1]
    print('\n\033[32;1m您的余额为 %s \033[0m' % (saving - expense))
    return (saving - expense)


product_list = [('iphone', 5800),                         
                ('macbook', 9000),
                ('coffee', 30),
                ('pythonbook', 80),
                ('bicycle', 1500)]


saving = input('请充值:')

choice_list = []

if saving.isdigit():                                       #判断输入是否合法
    saving = int(saving)

    while True:
        for i, v in enumerate(product_list, 1):             #enumerate()给对象编号。第二参数可设置起始数字,默认为0
            print(i, v)

        choice = input('请输入选择的产品编号[按q退出]:')

        if choice.isdigit():
            choice = int(choice)
            if choice > 0 and choice <= len(product_list):  #len(product_list)保证能随product_list的增删动态变化
                item = product_list[choice-1]
                if item[1] <= saving:
                    choice_list.append(item)
                    show_shopping_car(choice_list, saving)
                else:
                    print('余额不足!')
            else:
                print('编号错误!')

        elif choice == 'q':
            show_shopping_car(choice_list, saving)
            break
        else:
           print('输入错误,请您输入产品编号 ')

else:
    print('Invalid input !')
购物车(函数版)

 

posted @ 2017-05-30 15:39  seaidler  阅读(144)  评论(0)    收藏  举报