[[10, 6.0], [20, 5.0], [30, 4.0], [15, 3.0]]如何按第二个排序
data = [[10, 6.0], [20, 5.0], [30, 4.0], [15, 3.0]]
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data)
这个代码中,key=lambda x: x[1]
指定了排序的关键字,即按照每个子列表的第二个元素进行排序。在这个例子中,sorted_data
将会是按照第二个元素从小到大排列的排序结果。
P2240 【深基12.例1】部分背包问题
简单
P1223 排队接水
如果你想计算累加和,从第一个元素开始逐步累加,每次将当前累加和加上当前子列表的第一个元素即可。以下是一个实现的示例:
lm = [[10, 6.0], [20, 5.0], [30, 4.0], [15, 3.0]]
# 初始化累加和为0
cumulative_sum = 0
mm = 0
# 遍历 lm 中的每个子列表
for sublist in lm:
# 将当前子列表的第一个元素加到累加和中
cumulative_sum += sublist[0]
# 将当前累加和加到 mm 中
mm += cumulative_sum
print(mm) # 输出结果为 175,即 10 + (10+20) + (10+20+30) + (10+20+30+15)
RE,没通过,有空回来改
n=int(input())
li=[]
lm=[]
for i in range(n):
li+=map(int,input().split())
for j in range(1,n+1):
lm+=[[li[j-1],j]]
lm.sort(key=lambda x:x[0])
for m in range(n):
print(lm[m][1],end=" ")
print()
sum=0
for m in range(len(lm)-1):
sum+=(lm[m][0])*(n-m)
av = sum/n
print("{:.2f}".format(av))
下面是大佬代码
n=int(input())
li=[]
lm=[]
for i in range(n):
li+=map(int,input().split())
for j in range(1,n+1):
lm+=[[li[j-1],j]]
lm.sort(key=lambda x:x[0])
for m in range(n):
print(lm[m][1],end=" ")
print()
sum=0
for m in range(len(lm)-1):
sum+=(lm[m][0])*(n-m)
av = sum/n
print("{:.2f}".format(av))
P3817
liss+=int(input().split())
报错
liss=[]
for i in range(n):
liss+=[int(input().split())]
报错
input().split()
返回的是一个包含多个数字的列表,你不能直接将其添加到列表中。你需要使用 map()
函数将每个数字转换为整数后再添加到列表中。
liss = []
for i in range(n):
liss+=map(int,input().split())
##或
liss = list(map(int, input().split()))
###都是对的
###第一个好像有点问题?要具体情况具体分析把
没问题
cnn=0
j=0
if j<n-1:
if liss[j]+liss[j+1]>x:
liss[j+1]-=1
cnn+=1
else:
j+=1
#错的
while j<n-1:
if liss[j]+liss[j+1]>x:
liss[j+1]-=1
cnn+=1
else:
j+=1
n,x=map(int,input().split())
liss = list(map(int, input().split()))
cnn=0
j=0
while j<n-1:
if liss[j]+liss[j+1]>x:
liss[j+1]-=1
cnn+=1
else:
j+=1
print(cnn)
###部分超时
n, x = map(int, input().split())
liss = list(map(int, input().split()))
cnn = 0
for i in range(n - 1):
if liss[i] + liss[i + 1] > x:
diff = liss[i] + liss[i + 1] - x
liss[i + 1] = max(0, liss[i + 1] - diff)
cnn += diff
print(cnn)
###AC解
pop()
和 remove()
都是用于列表操作的方法,但它们的功能不同。
my_list = [1, 2, 3, 4, 5]
# 删除索引为 2 的元素,并返回被删除的值
deleted_value = my_list.pop(2)
print(my_list) # 输出 [1, 2, 4, 5]
print(deleted_value) # 输出 3
my_list = [1, 2, 3, 4, 5]
# 删除值为 3 的元素
my_list.remove(3)
print(my_list) # 输出 [1, 2, 4, 5]
好像要用指针,先学学
尺取法
要实现双指针,一个从前往后移动,一个从后往前移动,并且它们轮流移动
在同一个循环写两次指针移动,一个左,一个右
PS:我一直想在两层循环中指针依次移动,不对
n=int(input())
lis=list(map(int,input().split()))
lis.append(0)
lis.sort()
count, expend = 0, 0
left, right = 0, n
def jump(x, y):
global expend
expend += (lis[y] - lis[x]) ** 2
return expend
while count < n:
jump(left, right)
left += 1 # 左指针右移
jump(left, right)
right -= 1 # 右指针左移
count += 2
print(expend)
好好利用def函数,简化步骤
学一下指针移动