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