操作Python列表的一个综合题

循环输入若干组列表+对应权值
如:

请输入列表:[1,3,4,7,9]
请输入权值:10
...
输入q退出

然后把这些大列表都分成邻近两两一组的若干个小列表

[1,3],[3,4],[4,7],[7,9]

最后将这些出现过的小列表中的权值加起来

比如[1,3]在两个不同的列表中出现了(假设输入的列表不会出现两次[1,3]),权值分别是10和30

输入[1,3]
那么就可以输出40

#循环输入
[1,3,4,7,9]
权值=10
#分成[1,3],[3,4],[4,7],[7,9]
[2,4,7,8]
权值=20
[1,3,7,8,10]
权值=30
#输入q结束输入
#输入:
1,3
#输出:
40#(10+30)

4,7;30
7,8;50

请问该如何实现?
如果不用数据库的话可以实现吗?

你题目的解答代码如下:

while True:
    s = input('请输入列表:')
    if s.lower()=="q":
        break
    li = eval(s)
    n = int(input('请输入权值:'))
    li2 = []
    for i in range(len(li)-1):
        li2.append([li[i],li[i+1]])
    print(li2)
    dic = {}
    for a,b in li2:
        dic[(a,b)] = a*n+b*n
    print(dic)
    a,b = map(int,input().split(","))
    print(dic.get((a,b),f"没有{a},{b}子列表"))

     

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

你这个描述的好乱啊,最后的计算没看明白,为啥4,7:30,7,8;50,上边是1,3,换行40,到底需不需要换行

d = {}
while True:
    l = input('请输入列表:')
    if l=='q':break
    w = input('请输入权值:')
    if w=='q':break
    l = eval(l)
    w = eval(w)
    for i in range(1,len(l)):
        t = (l[i-1],l[i])
        if d.get(t):
            d[t] += w
        else:
            d[t] = w

print(d[eval('(' + input() + ')')])
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632