python-矩阵转置/将列表分割成块/和超过N的最短子数组

一:矩阵转置
题目描述

输入一个 n 行 m 列的矩阵 A,输出它的转置 AT。
输入
第一行包含两个整数 n 和 m,表示矩阵 A 的行数和列数。1≤n≤100,1≤m≤100。接下来 n 行,每行 m 个整数,表示矩阵 A 的元素。相邻两个整数之间用单个空格隔开,每个元素均在 1∼1000 之间。
输出
m 行,每行 n 个整数,为矩阵 A 的转置。相邻两个整数之间用单个空格隔开。
样例输入1
3 3
1 2 3
4 5 6
7 8 9

样例输出1
1 4 7
2 5 8
3 6 9

来源/分类(难度系数:三星)
每日一题 数组


完整代码展示:
# coding=utf-8
a,b=map(int,input().split())
c=[]
for i in range(a):
      d=list(map(int,input().split()))
      c.append(d)
e=0
while e<b:
       sum=''
       for j in range(0,a):
             sum+="{} ".format(c[j][e])
       print(sum)
       e+=1

# coding=utf-8
a,b=map(int,input().split())
c=[]
for i in range(a):
    d=list(map(int,input().split()))
    c.append(d)
e=0
while e<b:
    sum=''
    for j in range(0,a):
        sum+="{} ".format(c[j][e])
    print(sum)
    e+=1


代码解释:
“a,b=map(int,input().split()) ”,导入用户输入的矩阵行数a和列数b。
“c=[]
 for i in range(a):
       d=list(map(int,input().split()))
       c.append(d)                             ”,建立一个空列表c,接着循环a次:让用户输入矩阵一行的元素并将其储存在列表d中,再将d添加进c中。
“e=0
 while e<b:
        sum=''
        for j in range(0,a):
              sum+="{} ".format(c[j][e])
        print(sum)
        e+=1                                        ”,令e为循环密码子,初始值为0,当e<b时:建立一个空字符串sum,接着依次遍历0~a-1的数字,sum连接元素c[j][e],每两个元素之间插入一个空格。最后打印sum的值。每循环一次,e+1,直至e==b,跳出整个while循环。


运行效果展示:

3301cbb5a03649a6b71458fba4adf28b.jpg

aff6e2baf6684d8b8be2418b62bc6f97.jpg 

 

 

 

 

二:将列表分割成块
题目描述

编写一个程序,将一个数字列表按照指定大小分割成特定大小的块。
定义函数list_into_chunks()的函数,有两个参数num_list和chunk_size。
在函数内,将num_list分割成大小为chunk_size的子列表。
将这些子列表作为列表返回。
示例输入
1 2 3 4 5 2
示例输出
[[1, 2], [3, 4], [5]]
解释: 由于测试输入具有奇数个元素,而我们需要创建一个2(偶数)的块大小,剩余的元素将创建一个单元素子列表,即[5]。
输入会包含两行,第一行包含数字并已转为列表,第二行包含块大小。
考虑块大小chunk_size为偶数或奇数的情况。
来源/分类(难度系数:二星)
矩阵 数组


完整代码展示:
a=list(map(int,input().split()))
b=int(input())
c=[]
d=len(a)//b
e=0
for i in range(d):
      c.append(a[e:e+b])
      e+=b
c.append(a[e::])
f=[]
for i in range(0,len(c)):
      if len(c[i])!=0:
          f.append(c[i])
print(f)

a=list(map(int,input().split()))
b=int(input())
c=[]
d=len(a)//b
e=0
for i in range(d):
    c.append(a[e:e+b])
    e+=b
c.append(a[e::])
f=[]
for i in range(0,len(c)):
    if len(c[i])!=0:
        f.append(c[i])
print(f)


代码解释:
“a=list(map(int,input().split())) ”,导入用户输入的待处理数字并将其储存在列表a中。
“b=int(input()) ”,导入用户输入的数字列表需分割成的长度b。
“d=len(a)//b
 e=0
 for i in range(d):
       c.append(a[e:e+b])
       e+=b                       ”,令d等于列表a的长度除以b并保留整数部分。令e为循环密码子,依次遍历0~d-1的数字,将a中a[e:e+b]的部分添加进c中。每循环一次,e+b。
“c.append(a[e::])
 f=[]
 for i in range(0,len(c)):
       if len(c[i])!=0:
           f.append(c[i])    ”,将a中的余下部分添加进c中。建立一个空列表f,接着遍历c中元素,判断该元素是否为空:如果不为空,则将该元素添加进f中。
“print(f) ”,打印f的最终结果。


运行效果展示:

51afd215897c4463bf99fff5b2bef3ac.jpg

058117084ca64aa48354372811063d5f.jpg 

 

 

 

 

三:和超过N的最短子数组
题目描述

编写一个程序,找出所有元素之和严格超过给定值的最短连续子列表的长度。
定义函数shortest_sublist_exceeds_n(),它接受两个参数 - 一个整数列表lst和一个整数n。
该函数应返和严格大于n的最短子列表的长度。
如果不存在这样的子列表,函数应返回 -1。
示例输入
-1 2 3 4 7 1122
示例输出
4
解释: [-1, 2, 3, 4, 7, 11]的和超过22的最短子列表是[3, 4, 7, 11],所以输出4
两个for循环计算所有子列表的和,然后找到和大于n的最短子列表。
此处子列表是连续的,因此可以使用滑动窗口技术。
来源/分类(难度系数:一星)
数组 循环结构


完整代码展示:
a=list(map(int,input().split()))
b=int(input())
c=[]
for i in range(0,len(a)):
      if a[i]>=0:
           c.append(a[i])
c.sort(reverse=True)
if sum(c)<b:
     print(-1)
else:
       d=0
       sum=0
       while sum<=b:
              sum+=c[d]
              d+=1
       print(d)

a=list(map(int,input().split()))
b=int(input())
c=[]
for i in range(0,len(a)):
    if a[i]>=0:
        c.append(a[i])
c.sort(reverse=True)
if sum(c)<b:
    print(-1)
else:
    d=0
    sum=0
    while sum<=b:
        sum+=c[d]
        d+=1
    print(d)


代码解释:
“a=list(map(int,input().split())) ”,导入用户输入的数组元素并将其储存在列表a中。
“b=int(input()) ”,导入用户输入的定值b。
“c=[]
 for i in range(0,len(a)):
       if a[i]>=0:
            c.append(a[i])
 c.sort(reverse=True)  ”,建立一个空列表c,接着依次遍历a中元素,判断a[i]是否大于等于0:如果是,则将a[i]添加进c中。最后对c中元素进行升序排序。
“if sum(c)<b:
       print(-1)
 else:
        d=0
        sum=0
        while sum<=b:
               sum+=c[d]
               d+=1
        print(d)           ”,判断c中元素之和是否小于b:如果是,则打印-1,否则令d为循环密码子,sum为元素和,当sum<=b时:sum+c[d]。每循环一次,d+1,直至sum>b,跳出整个while循环。


运行效果展示:

4b46b787be8f4e2398525f657274c3ae.jpg

 a82136d9a1694d68bb12fefc0dd9ffcd.jpg

              (声明:以上内容均为原创)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪云-微星

感谢大家的支持与鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值