列表
1.什么是列表(list)
1)列表的长样子:列表使容器型数据类型(序列),将[]作为容器的标志,里面多个元素用逗号隔开:[元素1, 元素2, 元素3, 。。。]
2)列表的特点:列表是可变的(元素的个数、值和顺序可变) - 增删改:列表是有序的 - 支持下标操作
3)列表对元素的要求:没有要求(不管什么类型的数据都可以作为列表的元素)
# 1)空列表
list1 = []
list2 = [ ]
print(type(list1), type(list2)) # <class 'list'> <class 'list'>
print(bool(list1), bool(list2)) # False False
print(len(list1), len(list2)) # 0 0# 2)列表可以同时保存多个数据
list3 = [89, 90, 76, 99, 58]
print(list3)list4 = ['范成', 18, '男', 100, True]
print(list4)list5 = [10, 12.5, True, 'abc', [1, 0], {
'a':19}, (20, 9), {
20, 9}, lambda x: x*2]
print(list5)list6 = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]
2.列表的查操作 - 获取元素
查分为三种情况:获取单个元素、切片、遍历(一个一个的取)
1)获取单个元素
''' 语法:列表[下标] 功能:获取列表中指定下标对应的元素 说明: 列表 - 任何结果使列表的表达式,比如:保存列表的变量、具体的列表值等 [] - 固定写法 下标 - 下标又叫索引,是元素在有序序列中位置信息。python中有序序列中每个元素都有两组下标标值,分别是:从前往后从0开始递增的下标值:从后往前-1开始递减的下标值 注意:下标不能越界'''names = ['甄姬', '貂蝉', '韩信', '吕布', '赵云', '后羿', '鲁班', '狄仁杰']
print(names[1])
print(names[-1])
print(names[3])
2)遍历
''' 方式一 - 直接获取列表中的每个元素 for 变量 in 列表:循环体方式二 - 先获取到每个元素的下标值,然后通过下标在获取元素 for 下标 in range(len(列表)):循环体range(len(列表)) == range(列表中元素的个数)方法三 - 同时获取列表中的元素和对应的下标 for 下标,元素 in enumerate(列表):循环体 '''
方式一
for i in names:print(i)方式二
for index in range(len(names)):print(names[index])方式三
for i in enumerate(names):print(i[0], i[1])
练习
# 练习1: 统计不及格人数
scores = [89, 67, 56, 90, 98, 30, 78, 51, 99]
count = 0
for i in scores:if i < 60:count += 1
print('不及格人数:{}'.format(count))# 练习2:统计列表中整数的个数
list7 = [89, 9.9, 'abc', True, 'abc', '10', 81, 90, 23]
count = 0
for i in list7:if type(i) == int:count += 1print('整数的个数:{}'.format(count))# 练习3:求nums中所有偶数的和
num = 0
nums = [89, 67, 56, 90, 98, 30, 78, 51, 99]
for i in nums:if i % 2 == 0:num += i
print('nums中所有偶数的和:{}'.format(num))
3.列表的增加元素
1)添加单个元素
''' 列表.append(元素) - 在列表的最后添加一个有元素 列表.insert(下标)'''
movies = ['五十度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪']
print(movies)movies.append('肖申克的救赎')
print(movies)movies.insert(2, '沉默的羔羊')
print(movies)
2)批量添加
''' 列表1.extend(列表2) - 将列表2元素全部添加到列表1的后面 '''
movies.extend(['让子弹飞', '触不可及'])
print(movies)
练习
# 练习:求scores中所有的及格的分数提取出来
scores = [89, 67, 56, 90, 98, 30, 78, 51, 99]
list1 = []
for i in scores:if i > 60:list1.append(i)
print(list1)
4.循环练习题
-
判断101-200之间有多少个素数,并输出所有素数。
list1 = [] for a in range(101, 200):for i in range(2, int((a ** 0.5) + 1)):if a % i == 0:breakelse:list1.append(a) print(list1) #[101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]
-
求整数1~100的累加值,但要求跳过所有个位为3的数。
sum = 0 for i in range(1, 101):if i % 10 == 3:continueelse:sum += i print(sum)# 4570
-
有?分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数
fz = 1 fm = 1 n = 20 for i in range(n):fz, fm = fz + fm , fz print(fz, '/', fm)# 17711 / 10946
-
写程序计算 n 的阶乘 n! 的结果
n = int(input('输入整数n:')) sum = 1 for i in range(1, n+1):sum *= i print('n! = ', sum)
-
求1+2!+3!+…+20!的和
n = int(input('输入整数n:')) sum = 1 sum1 = 0 for i in range(1, n+1):sum *= isum1 += sum print('1! + 2! +...n! = ', sum1)# 输入整数n:20 # 1! + 2! +...n! = 2561327494111820313
-
写程序求表达式 a + aa + aaa + aaaa+ … 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)
例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333
n = int(input('输入整数n:')) a = int(input('输入整数a(1-9):')) sum = 0 for i in range(n):sum += a * (n - i) * (10 ** i) print(sum)# 37035
-
控制台输出三角形
a.根据n的值的不同,输出相应的形状 n = 5时 n = 4 ***** **** **** *** *** ** ** * *b.根据n的值的不同,输出相应的形状(n为奇数) n = 5 n = 7* **** *** ***** ************c. 根据n的值的不同,输出相应的形状 n = 4112112321 1234321n = 51121123211234321 123454321
1) n = 5 for i in range(n):print('*' * (n - i))***** **** *** ** *2) for i in range(0, n, 2):print(('*' * (i + 1)).center(5))* *** *****3) n = 5 num = 0 a = 1 for i in range(1, n + 1):num = num * 100 + aa += 2 * 10 ** iprint(str(num).center(20))1 121 12321 1234321 123454321
-
小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?
for i in range(7):for j in range(21):if (i * 15 + j * 5) > 100:breakfor z in range(51):if (i * 15 + j * 5 + z * 2) > 100:breakif (i * 15 + j * 5 + z * 2) == 100:print('洗发水{}瓶,牙刷{}个,香皂{}支'.format(i, j, z))
-
一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
a = 0.00008 count = 0 while 1:a *= 2count += 1if a >= 8848.13:print('对折{}次之后能达到珠穆朗玛峰的高度(8848.13米)'.format(count))break# 对折27次之后能达到珠穆朗玛峰的高度(8848.13米)
-
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
rabbit_1 = 1 rabbit_2 = 0 rabbit_3 = 0 n = 10 for i in range(1, n):if i == 2:rabbit_1, rabbit_2, rabbit_3 = rabbit_3, rabbit_1, rabbit_2 + rabbit_3elif i == 1:passelse:rabbit_1, rabbit_2, rabbit_3 = rabbit_2 + rabbit_3, rabbit_1, rabbit_2 + rabbit_3print('第{}个月已共有{}对兔子'.format(i, rabbit_1 + rabbit_2 + rabbit_3))
-
将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
n = b = 90 list = [] while 1:for i in range(2, int(b**0.5)+1):if b % i == 0:b = b // ilist.append(i)breakelse:list.append(b)break print('{} = {}'.format(n, list[0]), end='') for i in range(1, len(list)):print(' X {}'.format(list[i]), end='')
-
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
n = '5632' n2 = 0 for i in range(4):n2 = n2 * 10 + (int(n[i]) + 5) % 10 n2 = n2 // 1000 + (n2 % 10) * 1000 + (n2 // 100) % 10 *10 + (n2 // 10) % 10 * 100 print(n2)# 7810
-
本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。
n = 10000.0 for i in range(5):n = n * (1+0.003) print(n) # 10150.902704052423
-
输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)
n = input('请输入一个任意整数:') sum = 0 for i in range(len(n)):sum += int(n[i]) print(sum)# 请输入一个任意整数:123456 # 21
-
求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)
print('请输入两个整数(n < m)') n, m = int(input('请输入一个整数n:')), int(input('请输入一个整数m:')) Common_divisor = 0 for i in range(1, n + 1):if (n % i == 0) and (m % i == 0):Common_divisor = i Common_multiple = 0 i = 1 while 1:if (i * Common_divisor % n == 0) and (i * Common_divisor % m == 0):Common_multiple = i * Common_divisorbreaki += 1 print(Common_divisor, Common_multiple)# 请输入两个整数(n < m) # 请输入一个整数n:4 # 请输入一个整数m:5 # 1 20