列表
一 输入输出函数
输出函数: print()函数
- 默认每一个print函数,输出完内容后会输出一个换行符
- 一个print函数输出多个内容的时候,内容之间使用空格隔开的
- 内容后边加end=''来设置结束标志(默认是'\n')
- 通过设置sep的值来设置多个内容之间的间隔符(默认是' ')
print()('aaa', 100, end='\n', sep=',')
print('bbb')
输入函数: input()函数
- input()函数可以接收从控制台输入的内容(以回车未结束标志)
- input函数会阻塞线程,程序执行到input的时候会停下来,等待用户的输入,输入完成后才会接着执行后面的内容
- 在python3中用户接受到的数据是以字符串的形式返回的
name = input('请输入一个整数:')
print(name,name.type())
二 列表
列表(list):用来存储多个数据的一种数据类型,里面存储的单个数据称为元素
序列:容器类型数据(列表,字典,元组,集合)
-
特点:
- 有序的
- 可变的(容器中的内容的数量和值可变)
- 元素可以是任何类型的数据
-
列表的值:
用[]将列表中的元素括起来,多个元素之间用逗号隔开.[]:空列表
转换:只有序列类型的数据可以转换成列表li=list(被转换的序列)
生成式:li=list(iforiinrange(100))
- 怎么声明一个列表
list1=[]#创建一个空的列表
print(type(list1))
list2=[1,12.9,'abc',[1,2,3],{'x':3,'y':'Y'}]
print(list2,type(list2))
生成式
li=list(i for i in range(10))
print(li)
li=list(i for i in range(10) if i % 3 == 0)
print(li)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 3, 6, 9]
- 获取列表元素列表中的元素都对应一个小标:0len-1;-1-len
a. 获取单个元素:列表名[下标]下标不能月越界
names=['faker','uzi','ClearLove','fhgf']
print(names[2],names[-1])
b. 获取部分元素(切片)
列表名[起始下标:结束下标]
左闭右开返回的仍是列表
print(names[1:3],names[-3:-1])
列表名[起始下标:结束下标:步进]
左闭右开返回的仍是列表
print(names[0:4:2])
print(names[::-1])
起始下标和结束下标都可以缺省:
如果步进是正数,起始下标缺省就是从第一个元素开始获取;
如果步进为负数就是从最后一个元素开始获取
结束下标缺省,步进是正数,获取最后一个元素,步进是负数,从后往前获取到第一个元素
c. 一个一个的获取列表所有的元素(遍历列表)
foriinnames:
print(i)
i=0
whilei<len(names):
print(names[i])
i+=1
- 添加列表元素
a. 列表名.append(元素)
在列表的末尾添加一个元素
skills=[]
print(skills)
skills.append('炁体源流')
skills.append('拘灵遣将')
print(skills)
b. insert函数
在列表指定下标的前面插入一个元素
这里的下标可以越界,如果越界就会插入在列表的最前面或者最后面
skills.insert(1,'通天箓')
print(skills)
skills.insert(-1,'明魂术')
print(skills)
skills.insert(6,'六仙库贼')
print(skills)
c. +
列表1+列表2
将列表2中的元素和列表2的元素合并返回一个新的列表
lis = skills + names
print(lis)
例:从控制台输入10个学生的成绩,然后保存在一个列表中
scores=[]
for i in range(0,10):
temp=float(input('请输入第%d个学生的成绩:'%(i+1)))
while(temp>100ortemp<0):
temp=float(input('请输入有效的成绩:'))
scores.append(temp)
print(scores)
运行结果:
请输入第1个学生的成绩:54
请输入第2个学生的成绩:543
请输入有效的成绩:54
请输入第3个学生的成绩:67
请输入第4个学生的成绩:2
请输入第5个学生的成绩:656
请输入有效的成绩:45
请输入第6个学生的成绩:76
请输入第7个学生的成绩:867
请输入有效的成绩:65
请输入第8个学生的成绩:87
请输入第9个学生的成绩:34
请输入第10个学生的成绩:97
[54.0, 54.0, 67.0, 2.0, 45.0, 76.0, 65.0, 87.0, 34.0, 97.0]
- 删除列表元素
a. del语句
del可以删除任何数据
del列表名[下标]:删除列表中指定下标的元素下标不能越界
films=['肖生克','阿甘正传','小翟总','老翟总','肖生克']
del films[1]
print(films)
b. remove方法
列表名.remove(元素):删除列表中的指定元素
如果有多个相同元素,只删除第一个,如果要删除的元素不在列表中会报错
films.remove('肖生克')
print(films)
c. 列表名.pop(下标)
弹出列表中指定下标的元素(如果下标缺省则弹出最后一个元素)
films_poped=[films.pop()]
print(films,films_poped)
films_poped.append(films.pop(0))
print(films,films_poped)
练习:scores=[23,45,45,78,32,90,89,1],删除所有小于60分的成绩
scores=[23,45,45,78,32,90,89,1]
for i in scores[:]:
if i<60:
scores.remove(i)
print(scores)
运行结果:
[78, 90, 89]
练习
- 求s=a+aa+aaa+aaaa+aa...a的值,其中a是⼀一个数字。例如2+22+222+2222+22222(此时共有5个数相
加),⼏几个数相加有键盘控制。
a = int(input('请输入0~9的任意数字:'))
n = int(input('请输入运算数量:'))
num = 0
print('%d' % (a),end='',sep='')
for i in range(0,n-1):
temp = 0
for x in range(0,i+2):
temp += a * 10 ** x
print(' + %d'%(temp),end='',sep='')
num += temp
print(' = %d'%(num+a))
运行结果:
请输入0~9的任意数字:3
请输入运算数量:6
3 + 33 + 333 + 3333 + 33333 + 333333 = 370368
- 打印图形1
n = 4
@
@@
@@@
@@@@
n = 5
@
@@
@@@
@@@@
@@@@@
n=int(input('请输入层数:'))
for x in range(0,n):
print('@'*(x+1))
运行结果:
请输入层数:5
@
@@
@@@
@@@@
@@@@@
- 打印图形2
n = 3
@
@@@
@@@@@
n == 4
@
@@@
@@@@@
@@@@@@@
n=int(input('请输入层数:'))
for x in range(0,n):
print(' '*(n-(2*x-1)//2-2) + '@'*(2*x+1))
运行结果:
请输入层数:5
@
@@@
@@@@@
@@@@@@@
@@@@@@@@@
- 打印图形3
n = 3
@@@
@@
@
n=int(input('请输入层数:'))
for x in range(0,n):
print('@'*(n-x))
运行结果:
请输入层数:5
@@@@@
@@@@
@@@
@@
@
- 输⼊入两个正整数m和n,求其最⼤大公约数和最⼩小公倍数。
print('求m和n的最大公约数和最小公倍数')
m = int(input('请输入m的值:'))
n = int(input('请输入n的值:'))
li = []
for x in range(1,min(m,n)+1):
if m%x==0 and n%x==0:
li.append(x)
print('m和n的最大公约数是:%d'%(max(i for i in li)))
i = max(m,n)
while True:
if i%m == 0 and i%n == 0:
print('m和n的最小公倍数是:%d' % (i))
break
i+=1
运行结果:
求m和n的最大公约数和最小公倍数
请输入m的值:6
请输入n的值:12
m和n的最大公约数是:6
m和n的最小公倍数是:12
- 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数
n = 1000
li = []
for x in range(1,n+1):
count = 0
for i in range(1,x):
if x%i==0:
count+=i
if count==x:
li.append(count)
print('1000以内的所有完数:',li)
运行结果:
1000以内的所有完数: [6, 28, 496]
- 输出9*9⼝口诀
for x in range(1,10):
for i in range(0,x):
print(x, '*', i+1, '=', x*(i+1), end='')
print('\t',end='')
print()
运行结果:
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36
7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49
8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64
9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81
- 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
n = input('请输入一个正整数:')
for i in range(0,len(n)):
if i<len(n)/2+1 and n[i]!=n[-1-i]:
break
if i>len(n)/2:
print(n+'是回文数')
else:
print(n+'不是回文数')
运行结果:
请输入一个正整数:12322
12322不是回文数
请输入一个正整数:24642
24642是回文数
- 打印图形(菱形)
n = 4
@
@@@
@@@@@
@@@@@@@
@@@@@
@@@
@
n=int(input('请输入层数:'))
for x in range(1,n+1):
print(' '*(n-(2*x-1)//2-1) + '@'*(2*x-1))
for i in range(1,n):
print(' '*i + '@'*(2*(n-i)-1))
运行结果:
请输入层数:5
@
@@@
@@@@@
@@@@@@@
@@@@@@@@@
@@@@@@@
@@@@@
@@@
@
- 输⼊入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
string = input('请输入一个字符串:')
apha = 0
space = 0
digit = 0
elst = 0
for i in string:
if i.isalpha():
apha += 1
elif i.isspace():
space += 1
elif i.isdigit():
digit += 1
else:
elst += 1
print('此字符串长度为:%d, 英文字母有:%d个, 空格有%d个, 数字有%d个,'\
' 其他字符有%d个'%(len(string), apha, space, digit, elst))
运行结果:
请输入一个字符串:a B c D 465 #%$ 54 5435 AWDT#%#$%^FSDG45y
此字符串长度为:42, 英文字母有:13个, 空格有9个, 数字有11个, 其他字符有9个
列表作业
- 已知一个列表,求列表中心元素。
li = ['aaa', 'bbb', 3, '4', 'fasd', 7, 8, 'gfsgf',2]
print('已知列表:',li)
if len(li)%2 == 0:
print('该列表的中心元素是:', li[len(li)//2-1],'和',li[len(li)//2])
else:
print('该列表的中心元素是:', li[len(li) // 2])
运行结果:
已知列表: ['aaa', 'bbb', 3, '4', 'fasd', 7, 8, 'gfsgf', 2]
该列表的中心元素是: fasd
- 已知一个列表,求所有元素和。
li = [3,4,5,5,5.3,3.4,2,12,6.7,5.7]
count = 0
for i in li:
count+=i
print('列表:',li,'\n所有元素的和为:%.2f'%(count))
运行结果:
列表: [3, 4, 5, 5, 5.3, 3.4, 2, 12, 6.7, 5.7]
所有元素的和为:52.10
- 已知⼀一个列列表,输出所有奇数下标元素。
li = [3,4,5,5,5.3,3.4,2,12,6.7,5.7]
print('列表:',li,'\n奇数下标的元素为:',end='')
for i in range(0,len(li)):
if i%2==0:
print(li[i],end=' ')
运行结果:
列表: [3, 4, 5, 5, 5.3, 3.4, 2, 12, 6.7, 5.7]
奇数下标的元素为:3 5 5.3 2 6.7
- 已知一个列表,输出所有元素中,值为奇数的。
li = [3,4,5,5,5,3,2,12,6,5]
print('列表:',li,'\n奇数元素为:',end='')
for i in li:
if i%2!=0:
print(i,end=' ')
运行结果:
列表: [3, 4, 5, 5, 5, 3, 2, 12, 6, 5]
奇数元素为:3 5 5 5 3 5
- 已知一个列表,将所有元素乘二。
li = [3,4,5,5,5.3,3.4,2,12,6.7,5.7]
print('列表:',li)
for i in range(0,len(li)):
li[i]*=2
print('该列表的元素乘2后:',li)
运行结果:
列表: [3, 4, 5, 5, 5.3, 3.4, 2, 12, 6.7, 5.7]
该列表的元素乘2后: [6, 8, 10, 10, 10.6, 6.8, 4, 24, 13.4, 11.4]
- 已知一个列表,将所有元素加到第一个元素中。
li = [3,4,5,5,5.3,3.4,2,12,6.7,5.7]
print('列表:',li)
li[0] = [li[0]]
for i in range(1,len(li)):
li[0].append(li[i])
print('该列表的元素加到第一个元素中后:',li)
运行结果:
列表: [3, 4, 5, 5, 5.3, 3.4, 2, 12, 6.7, 5.7]
该列表的元素加到第一个元素中后: [[3, 4, 5, 5, 5.3, 3.4, 2, 12, 6.7, 5.7], 4, 5, 5, 5.3, 3.4, 2, 12, 6.7, 5.7]
- 已知一个列表A,将奇数位置元素存到B列表中,偶数元素存到C列表中。
A = [3,4,5,5,5.3,3.4,2,12,6.7,5.7]
B = []
C = []
for i in range(0,len(A)):
if i%2 == 0:
B.append(A[i])
else:
C.append(A[i])
print('列表A:',A,'\n列表B:',B,'\n列表C:',C)
运行结果:
列表A: [3, 4, 5, 5, 5.3, 3.4, 2, 12, 6.7, 5.7]
列表B: [3, 5, 5.3, 2, 6.7]
列表C: [4, 5, 3.4, 12, 5.7]
- 把A列表的前5个元素复制到B列表中。
A = [3,4,5,5,5.3,3.4,2,12,6.7,5.7]
B = ['aaa', 'bbb', 3, '4', 'fasd', 7, 8, 'gfsgf',2]
print('列表A:',A,'\n列表B:',B)
for i in range(0,5):
B.append(A[i])
print('添加A中前五个元素后列表B:',B)
运行结果:
列表A: [3, 4, 5, 5, 5.3, 3.4, 2, 12, 6.7, 5.7]
列表B: ['aaa', 'bbb', 3, '4', 'fasd', 7, 8, 'gfsgf', 2]
添加A中前五个元素后列表B: ['aaa', 'bbb', 3, '4', 'fasd', 7, 8, 'gfsgf', 2, 3, 4, 5, 5, 5.3]
- 把1----36分别放入列表中,计算列表数组对角元素之和。6 * 6的列表
li = [[1,2,3,4,5,6],
[7,8,9,10,11,12],
[13,14,15,16,17,18],
[19,20,21,22,23,24],
[25,26,27,28,29,30],
[31,32,33,34,35,36]]
print('对角元素之和为:%d'%(li[0][0]+li[0][5]+li[5][0]+li[5][5]))
运行结果:
对角元素之和为:74
- 有一个长度是10的列表,列表内有10个不重复的数字,要求按从大到小排序。
A = [3,4,5,5.3,3.4,2,12,6.7,5.7]
print('排序前:',A)
for i in range(0,len(A)):
for j in range(i+1,len(A)):
if A[i]<A[j]:
temp = A[i]
A[i] = A[j]
A[j] = temp
print('排序后:',A)
运行结果:
排序前: [3, 4, 5, 5.3, 3.4, 2, 12, 6.7, 5.7]
排序后: [12, 6.7, 5.7, 5.3, 5, 4, 3.4, 3, 2]
- 有一个长度是10的列表,要求删除某一个位置的元素
A = [3,4,5,5.3,3.4,2,12,6.7,5.7,6]
print('列表A:',A)
i = int(input('请输入要删除的位置序号:'))
A.pop(i-1)
print('删除后的列表A:',A)
运行结果:
列表A: [3, 4, 5, 5.3, 3.4, 2, 12, 6.7, 5.7, 6]
请输入要删除的位置序号:5
删除后的列表A: [3, 4, 5, 5.3, 2, 12, 6.7, 5.7, 6]
- 有一个长度是10的列表,按递增排列,用户输入一个数,插入适当位置。
A = [2, 3, 3.4, 4, 5, 5.3, 5.7, 6.7, 12]
print('列表A:',A)
num = int(input('请输入要插入的数:'))
for i in range(0,len(A)):
if num<A[i]:
A.insert(i,num)
break
print('插入该元素后的A列表:',A)
运行结果:
列表A: [2, 3, 3.4, 4, 5, 5.3, 5.7, 6.7, 12]
请输入要插入的数:6
插入该元素后的A列表: [2, 3, 3.4, 4, 5, 5.3, 5.7, 6, 6.7, 12]
- 有一个长度是10的列表,数组内有10个人名,要求去掉重复的
names = ['张三', '李四', '张三', '张三', '王五', '赵六', '张三', '小翟总', '李四']
print('去重前的名字列表:',names)
i = 0
while i<len(names):
j=i+1
while j<len(names):
if names[j] == names[i]:
del names[j]
j-=1
j+=1
i+=1
print('去重后的名字列表:',names)
运行结果:
去重前的名字列表: ['张三', '李四', '张三', '张三', '王五', '赵六', '张三', '小翟总', '李四']
去重后的名字列表: ['张三', '李四', '王五', '赵六', '小翟总']
- 把A列表的第三到第六位之间的元素删除。
A = [2, 3, 3.4, 4, 5, 5.3, 5.7, 6.7, 12]
print('删除前的列表A:',A)
for i in range(0,6-3):
del A[3-1]
print('删除3至6为后的列表A:',A)
运行结果:
删除前的列表A: [2, 3, 3.4, 4, 5, 5.3, 5.7, 6.7, 12]
删除3至6为后的列表A: [2, 3, 5.3, 5.7, 6.7, 12]
- 已知A列表,B列表,定义一个列表C,要求C包含A,B数组中的数据(无重复值)。
A = [3,4,5,5,5.3,3.4,2,12,6.7,5.7]
B = ['aaa', 'bbb', 3, '4', 'fasd', 7, 8, 'gfsgf',2]
C = A+B
i = 0
while i<len(C):
j=i+1
while j<len(C):
if C[j] == C[i]:
del C[j]
j-=1
j+=1
i+=1
print('列表A:',A,'\n列表B:',B,'\n列表C:',C)
运行结果:
列表A: [3, 4, 5, 5, 5.3, 3.4, 2, 12, 6.7, 5.7]
列表B: ['aaa', 'bbb', 3, '4', 'fasd', 7, 8, 'gfsgf', 2]
列表C: [3, 4, 5, 5.3, 3.4, 2, 12, 6.7, 5.7, 'aaa', 'bbb', '4', 'fasd', 7, 8, 'gfsgf']