我看这类题大家都把它做成了字符串的题,在这里我就写写我自己对这类题的解法吧。若有疏漏的地方还请批评指正。

1.列表数字元素加权和(1):

输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。第一层每个元素的值为:元素值*1,第二层每个元素的值为:元素值*2,第三层每个元素的值为:元素值*3,…,以此类推!

输入格式:

在一行中输入列表

输出格式:

在一行中输出加权和

输入样例:

[1,2,[3,4,[5,6],7],8]

输出样例:

72

通过观察发现,权值是和元素所在的层数是相同的。
在 python 中会把嵌套列表里面的列表看作是外层列表的一个元素。
比如:对于 [1,2,[3,4,[5,6],7],8] 这个列表来说,[3,4,[5,6],7] 被看成 [1,2,[3,4,[5,6],7],8] 列表中的一个元素。所以我们可以通过判断元素的类型来解决问题。

代码:

ls=eval(input())  #把输入转换成列表,而不是直接用字符的方式处理
def s(ls,level):    #传入一个列表和当前的层数
    sum=0    #加权和,初始化为0
    for i in ls:    #遍历列表中每一个元素
        if type(i) == int:    #如果这个元素的类型是整数形
            sum+=i*level      #就计算它的加权和
        else:                    #如果不是整数型,说明它是一个列表
            sum+=s(i,level+1)    #那么就进行下一层次的加权和
    return sum    #最后返回加权和
sum=s(ls,1)    #刚开始是在第一层
print(sum)

2.列表数字元素加权和(2):

输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。第一层每个元素的值为:元素值*1,第二层每个元素的值为:元素值*(-2),第三层每个元素的值为:元素值*3,第四层每个元素的值为:元素值*(-4),…,以此类推!

输入格式:

在一行中输入列表

输出格式:

在一行中输出加权和

输入样例:

[1,2,[3,4,[5,6],7],8]

输出样例:

16
这道题比第一题就多了一个权值的正负问题,通过观察可以发现偶数层数的权值为负数,在这里我用了(-1)^(level+1)来处理,还有更好的方法欢迎评论。

代码:

ls=eval(input())  #输入转换成列表,而不是直接用字符的方式处理
def s(ls,level):    #传入一个列表和当前的层数
    sum=0    #加权和,初始化为0
    level1=level*(-1)**(level+1)    #计算权值
    for i in ls:    #遍历列表中每一个元素
        if type(i) == int:    #如果这个元素的类型是整数形
            sum+=i*level1     #就计算它的加权和
        else:                    #如果不是整数型,说明它是一个列表
            sum+=s(i,level+1)    #那么就进行下一层次的加权和
    return sum    #最后返回加权和
sum=s(ls,1)    #刚开始是在第一层
print(sum)

3.求指定层的元素个数:

输入一个嵌套列表,再输入层数,求该层的数字元素个数。

输入格式:

第一行输入列表
第二行输入层数

输出格式:

在一行中输出元素个数

输入样例:

[1,2,[3,4,[5,6],7],8]
3

输出样例:

2

当前层数可以由level来获取

代码:

ls=eval(input())  #输入转换成列表,而不是直接用字符的方式处理
n=int(input())    #输入目标层数
def s(ls,level):    #传入一个列表和当前的层数
    sum=0    #数字元素个数,初始化为0
    for i in ls:    #遍历列表中每一个元素
        if type(i) == int:    #如果这个元素的类型是整数形
            if level==n:      #如果当前层是目标层
                sum+=1        #数字元素的个数加一
        else:                    #如果不是整数型,说明它是一个列表
            sum+=s(i,level+1)    #那么就进行下一层次的加权和
    return sum    #最后返回加权和
sum=s(ls,1)    #一开始是第一层
print(sum)

4. 列表元素个数的加权和(1):

输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权个数和。第一层每个元素算一个元素,第二层每个元素算2个元素,第三层每个元素算3个元素,第四层每个元素算4个元素,…,以此类推!

输入格式:

在一行中输入一个列表。

输出格式:

在一行中输出加权元素个数值。

输入样例:

[1,2,[3,4,[5,6],7],8]

输出样例:

15

直接上代码了

代码:

ls=eval(input())  #输入转换成列表,而不是直接用字符的方式处理
def s(ls,level):    #传入一个列表和当前的层数
    sum=0    #元素个数加权和,初始化为0
    for i in ls:    #遍历列表中每一个元素
        if type(i) == int:    #如果这个元素的类型是整数形
                sum+=level    #第几层算作几个元素
        else:                    #如果不是整数型,说明它是一个列表
            sum+=s(i,level+1)    #那么就进行下一层次的加权和
    return sum    #最后返回加权和
sum=s(ls,1)    #一开始是第一层
print(sum)