Python列表习题

一.纵横

莫大侠练成纵横剑法,走上了杀怪路,每次仅出一招。这次,他遇到了一个正方形区域,由n×n个格子构成,每个格子(行号、列号都从1开始编号)中有若干个怪。莫大侠施展幻影步,抢占了一个格子,使出绝招“横扫四方”,就把他上、下、左、右四个直线方向区域内的怪都灭了(包括抢占点的怪)。请帮他算算他抢占哪个位置使出绝招“横扫四方”能杀掉最多的怪。如果有多个位置都能杀最多的怪,优先选择按行优先最靠前的位置。例如样例中位置(1,2)、(1,3),(3,2),(3,3)都能杀5个怪,则优先选择位置(1,2)。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。对于每组测试,第一行输入n(3≤n≤20),第二行开始的n行输入n×n个格子中的怪数(非负整数)。

输出格式:

对于每组测试数据输出一行,包含三个整数,分别表示莫大侠抢占点的行号和列号及所杀的最大怪数,数据之间留一个空格。

输入样例:

2
3
1 1 1
0 1 1
1 1 1
3
3 2 1
4 6 5
8 7 9

输出样例:

1 2 5
3 2 32

题解: 

先定义一个列表用来存储二维数组,然后使用循环分别计算出一行中怪的总数和一列中怪的总数,然后将每一列和每一行存入相应的数组之中,然后遍历所有二维数组对应位置的行和列然后比较其行列总和的大小(从小到大比较可以保存住最开始出现的位置)

定义二维数组的代码如下:

my_list=[]
for i in range(n):
        my_list.append(input().split())    #即输入n行个数据以空格隔开,列数据由用户自己确定

存储每一个列的怪和行的怪的代码如下:

my_row=[]
my_col=[]
for j in range(n):
    sum_row=0
    for k in range(n):
       sum_row += int(my_list[j][k])
    my_row.append(sum_row)
for j in range(n):
    sum_col=0
    for k in range(n):
        sum_col += int(my_list[k][j])
    my_col.append(sum_col)

然后定义三个变量存储行值列值,最大值的数值,整体代码如下所示(因为数组索引从0开始所以输出时在行列值中需要加1)

num=int(input())
flag=0
while flag<num:
    my_list=[]
    my_row=[]
    my_col=[]
    n=int(input())
    i=0
    for i in range(n):
        my_list.append(input().split())
    li=0
    for j in range(n):
        sum_row=0
        for k in range(n):
            sum_row += int(my_list[j][k])
        my_row.append(sum_row)
    for j in range(n):
        sum_col=0
        for k in range(n):
            sum_col += int(my_list[k][j])
        my_col.append(sum_col)
    my_max=0
    temp_row=0
    temp_col=0
    for j in range(n):
        for k in range(n):
            if my_max < (my_col[k]+my_row[j] - int(my_list[j][k])):
                my_max=my_col[k]+my_row[j] - int(my_list[j][k])
                temp_row=j
                temp_col=k
    i+=1
    print(temp_row+1,temp_col+1,my_max)
    flag +=1

运行后如下所示:

  

二.获奖

在某次竞赛中,判题规则是按解题数从多到少排序,在解题数相同的情况下,按总成绩(保证各不相同)从高到低排序,取排名前60%的参赛队(四舍五入取整)获奖,请确定某个队能否获奖。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试的第一行输入1个整数n(1≤n≤15)和1个字符串ms(长度小于10且不含空格),分别表示参赛队伍总数和想确定是否能获奖的某个队名;接下来的n行输入n个队的解题信息,每行一个1个字符串s(长度小于10且不含空格)和2个整数m,g(0≤m≤10,0≤g≤100),分别表示一个队的队名、解题数、成绩。当然,n个队名中肯定包含ms。

输出格式:

对于每组测试,若某队能获奖,则输出“YES”,否则输出“NO”。引号不必输出。

输入样例:

1
3 team001
team001 2 27
team002 2 28
team003 0 7

输出样例:

YES

题解: 

由题目可知,先设置一个列表用来存储队伍的信息然后进行排序判断队伍可以获奖的最后一个下标为多少与其您输入的数据进行比较即可算出您的队伍是否可以获奖。

代码如下所示:

T=int(input())    #定义组数
for x in range(T):    #输入的组数
    n,team=input().split()    #自己输入的数据
    n=eval(n)
    awardteamnums = int(n*0.6+0.5)    #四舍五入,计算获奖的名额因为python不会自动的四舍五入所以                                                                            
                                                                                   #+0.5
    list_name=[]
    list_num=[]
    list_garde=[]
   
    for i in range(n):    #输入n组数据
        name,num,garde=input().split()
        num,garde=int(num),int(garde)
        list_name.append(name)    #存入队伍的相关信息之中
        list_num.append(num)
        list_garde.append(garde)
    nameindex = list_name.index(team)        #找到自己的队伍下标
    Garde=list_garde[nameindex]        #找到自己队伍所获得的值
    list_garde.sort(reverse=True)        #对获得的成绩进行排序然后进行查找
    sortindex = list_garde.index(Garde)    #获取排序完成后自己队伍所在的名数
    if sortindex <= awardteamnums-1:    #因为数组下标从1开始所以-1
        print("YES")
    else:
        print("NO")

运行的结果如下所示:

 

 

下面是三个Python列表习题的解答: 1. 计算所有偶数的和: ```python list1 = [11, 53, 40, 45, 27, 16, 28, 99] list = [] for x in list1: if x % 2 == 0: list.append(x) print(sum(list)) ``` 这段代码遍历了列表中的每个数字,如果数字是偶数,则将其添加到新的列表中。最后,使用`sum()`函数计算新列表中所有数字的和,并打印出结果。 2. 打印列表中所有的奇数: ```python list1 = [11, 53, 40, 45, 27, 16, 28, 99] list = [] for x in list1: if x % 2 != 0: list.append(x) print(list) ``` 这段代码遍历了列表中的每个数字,如果数字是奇数,则将其添加到新的列表中。最后,打印出新列表中的所有数字。 3. 打印列表中所有能被3整除但是不能被2整除的数: ```python list1 = [11, 53, 40, 45, 27, 16, 28, 99] list = [] for x in list1: if x % 3 == 0 and x % 2 != 0: list.append(x) print(list) ``` 这段代码遍历了列表中的每个数字,如果数字能被3整除且不能被2整除,则将其添加到新的列表中。最后,打印出新列表中的所有数字。 希望这些代码可以帮助你完成Python列表的练习题!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【练习题python列表](https://blog.csdn.net/weixin_47005749/article/details/128967352)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小侯不躺平.

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值