Bootstrap

python列表元素的积

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来代替。

;