day06、列表 2018-12-29

一、复习

1.分支结构

if 的用法:
if 条件语句:
代码段

if - else 的用法:
if 条件语句:
代码段1
else:
代码段2

if - elif else 的用法:
if 条件语句1:
代码段1
elif 条件语句2:
代码段2
elif 条件语句3:
代码段3
······
else:
代码段4

2.循环结构

for - in 的用法:
for 变量 in 序列:
循环体
循环:字符串、range、列表、字典、元组、集合、迭代器、生成器
在 python3.x 的时候为:range();在 python2.x 的时候为:x.range();

while 的用法:
while 条件语句:
循环体

遍历序列、循环次数确定时,用 for 循环;
循环次数确定时,用 while 循环。

关键字:continue、break、else
coutinue:结束当前循环,进入下一次循环的判断;
break:结束整个循环;
else:循环正常死亡时,执行 else 里面的代码段

二、了解列表

1.什么是列表(list)

列表是python中提供的容器型数据类型,相对字符串更灵活。是 可变 并且 有序的 。
可变 -----列表中每个元素的值可变,列表长度可变,列表中元素顺序可变。(支持增加、删除、改变)
有序 -----列表中每个元素可以通过下标来确定元素的位置。
例如:
声明一个列表,可以保存公司所有员工的名字。

name = ['张三', '李四', '王五']
print(name)

运行效果:

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe "C:/Users/Administrator/PycharmProjects/untitled1/day6.list 12.29/02、know list 12.29.py"
['张三', '李四', '王五']

2.列表的字面量:;
通过[]括起来,里面有多个元素,每个元素用逗号隔开:
[1, 2, 3, 'adc', True]
num = 100; [num, 200]
[] -----空列表。

注意:列表元素的类型可以为任何python中支持的数据类型;并且同一个列表中不同元素的类型可以不一样。
任何数据都可以作为列表中的元素:
例如:

list1 = [123, 4.56, 'adc', True, [1, 2, 3], {'name' : '阿黄'}, lambda x: 2 * x]

list2 = [
    123,
    4.56,
    'adc',
    True,
    [1, 2, 3],
    {'name' : '阿黄'},
    lambda x: 2 * x
]

a = [1, 2, 3]
list3 = [a, 4]
print(list3)

运行效果:

[[1, 2, 3], 4]

2.获取列表元素(与字符串获取字符的语法一样)

a.获取单个元素:

列表[下标] -----获取列表中指定下标对应的元素。
例如:

list4 = [10, 20, 30, 40, 'adc']
print(list4[0], list4[-1])

运行效果:

10 adc
b.获取部分元素(切片): -----结果是列表。

列表[开始下标 : 结束下标 : 步长] -----取不到结束下标。
注意:取不到的时候,结果为空列表。
例如:

list5 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list5[2: 4])              # [2, 3]
print(list5[1: 5: 2])           # [1, 3]
print(list5[2: -2: -1])         # []
print(list5[: 2])               # [0, 1]
print(list5[2:: -1])            # [2, 1, 0]
print(list5[:: -1])             # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

运行效果:

[2, 3]
[1, 3]
[]
[0, 1]
[2, 1, 0]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
c.一个一个的取出所有的元素(遍历)

可以直接使用 for 循环直接遍历列表,拿到每个元素;(操作元素时与下标无关时)
也可以通过遍历下标,来拿到列表元素,再遍历。(操作元素时与下标有关时)
例如:

for i in list5:
    print('列表第 %i 个元素为:' % i, i)

for i in range(len(list5)):
    print('下标:', i)
    print('里面的元素为:', list5[i])

运行效果:

列表第 0 个元素为: 0
列表第 1 个元素为: 1
列表第 2 个元素为: 2
列表第 3 个元素为: 3
列表第 4 个元素为: 4
列表第 5 个元素为: 5
列表第 6 个元素为: 6
列表第 7 个元素为: 7
列表第 8 个元素为: 8
列表第 9 个元素为: 9
下标: 0
里面的元素为: 0
下标: 1
里面的元素为: 1
下标: 2
里面的元素为: 2
下标: 3
里面的元素为: 3
下标: 4
里面的元素为: 4
下标: 5
里面的元素为: 5
下标: 6
里面的元素为: 6
下标: 7
里面的元素为: 7
下标: 8
里面的元素为: 8
下标: 9
里面的元素为: 9

练习:求整个班的平均成绩。

cj = [50, 60, 70, 80, 90, 100]
sum1 = 0
print('这个班的成绩为:', cj)
for i in range(len(cj)):
    sum1 += cj[i]
print('这个班的平均成绩为:', sum1 / len(cj))

运行效果:

这个班的成绩为: [50, 60, 70, 80, 90, 100]
这个班的平均成绩为: 75.0

三、列表的增加、删除、修改

1.增加(添加列表元素):

a.append:

列表.append(元素) -----在指定的列表最后,添加指定的元素。
注意:不会产生新的列表,修改的是原列表。
例如:

list1 = ['0','1','2','3','4']
list1.append('5')
print(list1)

运行效果:

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe "C:/Users/Administrator/PycharmProjects/untitled1/day6.list 12.29/03、add and delete and update 12.29.py"
['0', '1', '2', '3', '4', '5']
b.insert

列表.insert(下标, 元素) -----在指定的下标前,插入指定的元素。
例如:

list1.insert(3, '这是插入')
print(list1)

运行效果:

['0', '1', '2', '这是插入', '3', '4', '5']

2.删除(删除元素)

a.del -----python中的关键字,可以用它删除任何数据。

del 列表[下标] -----删除列表中指定下标所对应的元素,下标不能越界,不然会报错。

del list1[3]
print(list1)

运行效果:

['0', '1', '2', '3', '4', '5']
b.remove

列表.remove(元素) -----删除列表中指定的元素。
注意:若有多个相同,只删除第一个元素;要删除元素若不存在列表中,会报错。

c.pop

列表.pop() -----将列表中最后一个元素,在列表中取出。
列表.pop(下标) -----将列表中指定下标的元素,在列表中取出。
注意:与 del 和 remove 不同,虽然已经不在列表里面,但是可以保存在内存里面。
例如:

str1 = list1.pop()
print(str1, list1)

list1.pop(0)
print(list1)

运行效果:

5 ['0', '1', '2', '3', '4']
['1', '2', '3', '4']

练习:用一个列表统计一个班的年龄(控制台不断输入年龄的值,直到输入 end 为止),然后删除所有小于18岁的年龄
坑一:遍历列表删除部分元素,删不全! -----解决方法:循环时遍历的是原列表的切片(返回一个新列表)

age = input('请输入年龄:')
ages = []
while age != 'end':
    ages.append(int(age))
    age = input('请输入下一个年龄:')
for age in ages[:]:
    if age < 18:
        ages.remove(age)
print('年龄:', ages)

运行效果:

请输入年龄:12
请输入下一个年龄:13
请输入下一个年龄:18
请输入下一个年龄:19
请输入下一个年龄:end
年龄: [18, 19]

练习:将小于 18 岁的取出来
坑二:通过下标遍历列表,取出元素的时候,下标越界和元素获取不全
解决方法:下标对应的元素需要删除,下标不动;不会删除下标加1

age = input('请输入年龄:')
ages = []
while age != 'end':
    ages.append(int(age))
    age = input('请输入下一个年龄:')
i = 0
while i <= len(ages):
    nl = ages[i]
    if nl < 18:
        nl = ages.pop(i)
        print('小于18的年龄有:', nl)
        i += 1

运行效果:

请输入年龄:12
请输入下一个年龄:15
请输入下一个年龄:17
请输入下一个年龄:19
请输入下一个年龄:21
请输入下一个年龄:end
小于18的年龄有: 12
小于18的年龄有: 17

3.修改(修改元素的值)
列表[下标] = 新值 -----修改列表中指定下标的值
例如:

lis2 = [1, 2, 3, 4]
lis2[0] = 0
print(lis2)

运行效果:

[0, 2, 3, 4]

练习:有一个列表中保存的是学生的成绩,要求将列表中成绩小于60分的改成'下一个班见',并且统计留级的有多少人。

lj = 0
zcj = [56, 57, 58, 59, 60, 61, 62, 63]
for i in range(len(zcj)):
    if zcj[i] < 60:
        zcj[i] = '下一个班见'
        lj += 1
print(zcj, '\n留级的有:', lj, '人')

运行效果:

['下一个班见', '下一个班见', '下一个班见', '下一个班见', 60, 61, 62, 63] 
留级的有: 4 人

四、列表的相关运算

1.相关运算:

a.+, *(数学运算)
列表1 + 列表2 -----将两个列表中的元素合并在一起,产生一个新的列表;原列表值不变。
列表1 * N -----将两个列表中的元素重复 N 次,产生一个新的列表;原列表值不变。

b.支持比较运算
列表1 == 列表2 -----判断真假,返回一个布尔值。
列表1 > 列表2 -----比较大小(比较原理与字符串类似),判断真假,返回一个布尔值;只有类型一样的时候才能比较。

2.in / not in

元素 in 列表 -----判断列表中是否存在指定的元素
例如:

print([1, 2] in [1, 2, 3])              # 结果为 False
print([1, 2] in [[1, 2], 'adc', '+'])   # 结果为 True
print('adc' in [1, 'adc', False])       # 结果为 True

运行效果:

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe "C:/Users/Administrator/PycharmProjects/untitled1/day6.list 12.29/04、list operation 12.29.py"
False
True
True

3.len()

len(列表) -----获取序列中元素的个数。

4.list

list(数据) -----将序列数据转换成列表。(只有序列才能转换)将序列中所有的元素转换成列表的元素。
注意:不能用python给我们提供的类型的名字来做变量,在使用该类型的时候会报错。

5.序列的其它方法

max() -----获取序列中值最大的元素
min() -----获取序列中值最大的元素
sum() ----- 求序列中所有元素的和
注意:以上三个方法,要求序列中的元素类型必须一致,并且这个类型支持比较运算和甲方运算。(一般是数字序列用)
例如:

print(max([20, 30, 40, 50.50]))
print(min([20, 30, 40, 50.50]))
print(sum([20, 30, 40, 50.50]))

运行效果:

50.5
20
140.5

Process finished with exit code 0

你可能感兴趣的:(day06、列表 2018-12-29)