2018-08-27 day6-list和tuple

列表LIST

认识list

  • 列表是有序、可变的容器类型(元素数量、值可变),内部的元素可以任何类型.
  • 列表是一种序列,可迭代
  • 列表声明:
# 声明方式: 列表名 = [data1,data2...]
names = ['Lucian', 'Jin', ' ']
# 允许空列表[]
grade = []
# 其他类型(必须为序列)转换成list
f_list = (1,2,'list')
str_list = list(f_list)
print('f_list: %s.str_list: %s'%(f_list,str_list))

result:
f_list: (1, 2, 'list').str_list: [1, 2, 'list']

数据修改

获取列表元素
  • a.获取单个元素 列表[下标]
  • b.获取多个元素(切片)
# 列表[下标1:下标2] 同字符串的切片操作
# 列表[下标1:下标2:步长] 同字符串的切片操作
person_list = ['lucian', 'jin', 'lax', 'ez']
print('person_list[1:3]: %s' % (person_list[1:3]))
print('person_list[::2]: %s' % (person_list[::2]))

result:
person_list[1:3]: ['jin', 'lax']
person_list[::2]: ['lucian', 'lax']
  • c.遍历列表
    1. 一个一个获取列表中的每个元素
    for item in person_list:
        print(item)
    
    1. 写一个列表来保存一个班的学生的成绩,统计班上成绩在80以上的个数
    student_grades = 
    [10,90,50,80,40,60]
    count = 0
    for item in student_grades:
        if item >= 80:
            count += 1
    print('成绩大于80的人数:%d' % count)
    
    result:
    成绩大于80的人数:2
    
修改列表元素
  • 语法: 列表名[下标] = 新值 通过下标获取元素,并重新赋值.
  • 注意: 重新赋值的索引必须存在,否则IndexError
child = ['小明', 10 , '幼稚园']
print(child)
child[0] = '小刚'
print(child)

result:
['小明', 10, '幼稚园']
['小刚', 10, '幼稚园']
  • 增加列表元素
    list.append(obj) -- 在列表末尾添加一个元素
child.append('男')
print(child)

result:
['小刚', 10, '幼稚园', '男']

list.insert(index,obj) -- 在指定的索引位置添加一个元素

child.insert(1, '2008-10-1')
print(child)

result:
['小刚', '2008-10-1', 10, '幼稚园', '男']
  • 案例:录入5名学生的成绩,并保存在一个列表中
student_list1 = []
student_list2 = []
for item in range(5):
    grade = int(input('输入学生的成绩:'))
    student_list1.append(grade)
    student_list2.insert(0,grade)
print(student_list1)
print(student_list2)

result:
输入学生的成绩:11
输入学生的成绩:12
输入学生的成绩:13
输入学生的成绩:14
输入学生的成绩:15
[11, 12, 13, 14, 15]
[15, 14, 13, 12, 11]
删除列表元素
  • del 列表[下标] 删除指定索引的数据
foods = ['辣条','ice cream','干脆面','牛板筋','cola']
del foods[2]
print(foods)

result:
['辣条', 'ice cream', '牛板筋', 'cola']
  • del 列表 删除整个列表
  • 列表.remove(obj) 删除指定的符合的第一条数据
foods.remove('ice cream')
print(foods)

result:
['辣条', '牛板筋', 'cola']
  • 列表.pop(index) 将列表中指定的索引对应的数据拿出来
cola = foods.pop(2)
print(cola,foods)

result:
cola ['辣条', '牛板筋']
  • 案例:将一个保存成绩的列表中,成绩低于60的成绩全部删除
num_list = [78,59,40,90,89,45,69,30]
# 在做数据遍历又需要保存原数据的时候,使用数据的拷贝
for item in num_list.copy(): #也可以使用num_list[:]来进行复制
    if item < 60:
        num_list.remove(item)
print(num_list)

result:
[78, 90, 89, 69]

数据存储

python中,变量在存储数据的值的时候,分为两种情况:

  • 值类型: 变量存储数据直接存值--整型、浮点型、布尔、字符串
  • 引用类型: 变量存数据的时候,存数据在内存中的地址--列表、元组、字典、集合、函数。引用类型赋值是赋的地址。
  • 对比: 引用类型修改数据,不会修改地址。因此,对于直接复制的数据b,修改数据b的一项,原数据也会得到修改,因为它们所指向的数据块相同,地址相同.
    需要使用拷贝就不会修改原数据。
list1 = [1,2,3]
list2 = list1
list3 = list1[:]
print(id(list1),id(list2),id(list3))
list1.append(4)
print(list1,list2,list3)

result:
40563016 40563016 39925560
[1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3]

相关运算

+ 操作

list1 + list2 list1中元素和list2中的元素全部放在一起

list1 = [1,2,3]
list2 = list1 + [1,2,3]
print(list2)

result:
[1, 2, 3, 1, 2, 3]
* 操作

list1 * N 将list1中元素重复N次,产生一个新列表

list3 = list1*2
print(list3)

result:
[1, 2, 3, 1, 2, 3]
in / not in

obj in list 判断一个元素是否在列表list中

列表长度

len(list) 获取列表list的长度

相关的方法
函数 含义
list.count(obj) 统计list中obj元素的数量
list.extend(seq) 在list的后面添加seq序列中每个元素
list.index(obj) 获取obj元素的索引
list.pop(index) 从列表中取出指定索引位置的元素,如果不写index,则取出最后一位
list.reverse() 逆序输出列表
list.sort(reverse=False) 对列表进行排序操作,默认升序排序;如果reverse=True,则为降序排序
list.clear() 删除列表中的所有元素
list.copy() 将列表中的元素进行拷贝形成新列表,相当于[:].此处的拷贝是浅拷贝

深拷贝和浅拷贝

  • 浅拷贝 只是拷贝列表里每个元素的值(若是对象就拷贝对象的地址),拷贝前后列表里面的子序列还是指向同一个地址
  • 深拷贝 拷贝列表里面的元素的值,遇到子序列就拷贝子序列,产生新的地址。若在子序列中有子序列就再拷贝一次,再产生一次新地址。保证引用类型的序列都拷贝了一份。因此修改子序列里的值,不会对原列表产生影响。
  • 浅拷贝案例
numbers1 = [1,2]
numbers = [numbers1, 4,5]
new_numbers = numbers.copy()
numbers1.append(3)
print('浅拷贝',numbers, new_numbers)

result:
浅拷贝 [[1, 2, 3], 4, 5] [[1, 2, 3], 4, 5]
2018-08-27 day6-list和tuple_第1张图片
浅拷贝.png
  • 深拷贝案例
import copy
numbers1_1 = [1,2]
numbers_1 = [numbers1_1, 4,5]
new_numbers_1 = copy.deepcopy(numbers_1)
numbers1_1.append(3)
print('深拷贝',numbers_1, new_numbers_1)

result:
深拷贝 [[1, 2, 3], 4, 5] [[1, 2], 4, 5]
2018-08-27 day6-list和tuple_第2张图片
深拷贝.png

元组Tuple

元组就是不可变的列表,除可变相关的内容外,其他都与列表相同

声明元组

元组 = (内容1,内容2...)

tuple1 = (1,2,'a',[3,4])
tuple2 = ()
tuple3 = (1,)

注意:当声明只有一个元素的元组时,需要在其后加逗号 。
获取元素
  • tuple[index]--获取元组指定索引位置的值
  • tuple[下标1:下标2]--获取含下标1到下标2之前的值
  • tuple[下标1:下标2:步长]--获取含下标1到下标2之前,指定步长的值
特殊操作
  • 指定坐标值
point = (3, 4)
print('x:',point[0],'y:',point[1])
  • 对两个变量同时指定一个值
a, b = 2
print(a, b)
  • 对涉及含两个变量以上的同时计算,计算时不改变变量的值
a = c = 2
b = d = 5
a,b = b,a+2
(c,d) = (d,c+2)
print(a,b,c,d)

result:
5 4 5 4
  • 通过在变量加 * 号,获取元组、列表中一部分元素值,结果是一个列表
user = ('Double Kou', '蜂蜜柚子茶','Lucian',2,5)
*name,year = user #对于含*的部分,获取大部分值,没有*的只返回一个值。只能有一个*.
print('*name:',name,'year',year)

result:
*name: ['Double Kou', '蜂蜜柚子茶', 'Lucian', 2] year 5

你可能感兴趣的:(2018-08-27 day6-list和tuple)