1
大部分元素是0的矩阵称为稀疏矩阵,假设有k个非0元素,则可以把矩阵用k * 3的矩阵简记之,其中第一列是行号,第二列是列号,第三列是该元素的值。如:
0 0 0 5 简记成:1 4 5
0 2 0 0 简记成:2 2 2
0 1 0 0 简记成:3 2 1
试编程读入一个3行5列的稀疏矩阵,转换成简记形式。
输入格式
输入包括3行,每行5个正整数,以空格隔开,代表一个3行5列的稀疏矩阵。
输出格式
输出k行,k为输入的矩阵中非0元素的个数。每行分别代表一个非0元素,按照从左到右,从上到下的顺序。每行包括三个整数,以空格隔开,分别代表该非0元素的行号,列号,以及元素的值。
示例1
输入:
0 3 0 0 0
0 0 7 0 0
1 0 0 0 5
输出:
1 2 3
2 3 7
3 1 1
3 5 5
解析:输入的格式是3行5列的数字,首先我们先把3行数据切片保存到列表a,b,c中
a1,b1,c1是计数用,用来记录非0数值所在的位置。
a=list(map(int,input().split()))
b=list(map(int,input().split()))
c=list(map(int,input().split()))
a1=b1=c1=0
通过for循环遍历列表a中的数据,如果是0,则计数加1,如果不是0,则输出一行三个数字,1代表第一行,a1+1表示非0数字的列数,i就是这个数字,输出完成计数也要加1 ,因为一行可能不只一个非0的数字。
for i in a:
if i==0:
a1+=1
else:
print('%s %s %s'%(1,a1+1,i))
a1+=1
同上 ,通过for循环遍历列表b,c中的数据。
for i in b:
if i==0:
b1+=1
else:
print('%s %s %s'%(2,b1+1,i))
b1+=1
for i in c:
if i==0:
c1+=1
else:
print('%s %s %s'%(3,c1+1,i))
c1+=1
2
编程猫拿到了一个n*m二维列表,每一个位置和每一个位置存放的数字。你能将这个列表还原出来吗?没有告诉我们位置都是存放 0。
输入格式
第一行为整数看k, n和m
第2行到k+1 行每行有3个第一个告诉我们是在列表中第几行,第二个数字表示为列表中第几个,最后一个数字表示当前列表中存放的数字。
输出格式
输出n行,每行一个列表
示例1
输入:
2 2 2
0 1 5
1 1 6
输出:
[0, 5]
[0, 6]
解析:第一行的数字分别是表示有几个非0的数字,一共有几行列表,一行列表中有几个数字。
k,n,m = input().split()
k,n,m = int(k),int(n),int(m)
将数值保存到变量中
然后根据行数n,和列数m,创建列表并全部先填入0
a = []
for i in range(n):
a.append([])
for j in range(m):
a[i].append(0)
非0的数字根据第2行到k+1 行每行有3个数,第一个告诉我们是在列表中第几行,第二个数字表示为列表中第几个,最后一个数字表示当前列表中存放的数字。
这里的数字和列表中的序号是一致的,比如0 1 5表示在第一行列表中的第二项是数字5。
for i in range(k):
x,y,z = input().split()
x,y,z = int(x),int(y),int(z)
a[x][y] = z
最后输出所有的列表
for i in range(n):
print(a[i])
3
在python中列表可以存放,各种各样的数据类型,当然也是可以存放列表的。我们称这样的列表为多重列表,如图所示:
那么你能读入一些数据讲他们转换为多重列表吗?每一行为一个列表,将他们组合为一个列表,并且输出。
输入格式
输入数据有n行
第一行为整数n
第二到n+1行 为用单个空格隔开的整数
输出格式
一个多重列表
示例1
输入:
3
1 2 3
4 5 6
7 8 9
输出:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
解析:将列表数据加入到另一个列表中可以使用append( )。
首先获取列表的数量,并新建一个列表
n=int(input())
t=[]
循环n次,将列表增加到空列表中去
for i in range(n):
l=list(map(int,input().split()))
t.append(l)
最后输出大列表
print(t)
领取专属 10元无门槛券
私享最新 技术干货