python列表元素的积
描述
一个由n(n>1)个数字组成的列表 ls,输出一个列表lt,其中lt中第i个元素等于ls中除ls[i]之外所有元素的乘积。
输入输出均为列表形式。试例:
输入 | 输出 |
---|---|
[1,2,3,4] | [24,12,8,6] |
方法一:
ls = eval(input(""))
s = 1
lt = []
for i in range(len(ls)):
tem = ls[:]
tem.pop(i)
for j in tem:
s *= j
lt.append(s)
s = 1
print(lt)
使用pop函数在列表中去除自身元素,遍历剩下的元素相乘。每次循环遍历之后,需要使乘积s归为1,方便下一个元素的求解。
方法二:
ls = eval(input(""))
s = 1
lt = []
for i in range(len(ls)):
for j in range(len(ls)):
if i==j:
continue
s=s * ls[j]
lt.append(s)
s=1
print(lt)
用continue来排除自身。
方法三:
所有的元素相乘后的积,除以自身。
要注意0的存在以及存在的个数。
def product(ls):
lt = []
ls_ji1 = 1 #判断列表中是否存在0,存在0,则为0;不存在0,则为1
ls_ji2 = 1
m=0 #m统计一共有多少个0
for i in range(len(ls)):
if ls[i] == 0:
ls_ji1 = 0
ls_ji2 = ls_ji2 * 1
m = m+1
else:
ls_ji2 = ls_ji2 * ls[i] #列出除0之外所有数的乘积
for j in range(len(ls)):
if ls[j] != 0 and ls_ji1 == 0: #自身不为0,但列表中存在0,乘积为0
lt.append(0)
elif ls[j] != 0 and ls_ji1 != 0: #列表中不存在0
lt.append(ls_ji2 // ls[j])
elif ls[j] == 0 and m < 2: #自身为0,列表中只有一个0
lt.append(ls_ji2)
elif ls[j] == 0 and m >=2: #自身为0,列表中存在至少两个0
lt.append(0)
return lt
ls = []
ls=eval(input())
print(product(ls))
方法中ls_ji1有些多余,判断时可以用m来代替。