取除当前元素以外的所有元素

Taking all elements except the current element

我想获取列表中除当前元素之外的所有元素。这是列表:

nums = [1, 1, 3, 5, 2, 3, 4, 4]

我尝试使用列表理解:

[(nums[:x:],nums[x+1:]) for x in range(len(nums)) ]

这是我得到的输出:

[([], [1, 3, 5, 2, 3, 4, 4]),
 ([1], [3, 5, 2, 3, 4, 4]),
 ([1, 1], [5, 2, 3, 4, 4]),
 ([1, 1, 3], [2, 3, 4, 4]),
 ([1, 1, 3, 5], [3, 4, 4]),
 ([1, 1, 3, 5, 2], [4, 4]),
 ([1, 1, 3, 5, 2, 3], [4]),
 ([1, 1, 3, 5, 2, 3, 4], [])]

我得到两个空白列表,一个在开头,一个在结尾,这是正确的。 我想知道是否有办法通过验证将这 2 个空白列表编辑为 [1]?

本质上我需要计算除当前数以外的所有数的乘积,不允许使用除法

此外,有一个时间限制我不能使用 nested/multiple for loops 因为测试用例会在超过时间限制时失败

不是很漂亮,但这很有效:

nums = [1, 1, 3, 5, 2, 3, 4, 4]

n = [(nums[:x:],nums[x+1:]) if x!=0 and x!=len(nums)-1 else ((nums[:x:],[1]) if x==len(nums)-1 else ([1],nums[x+1:])) for x in range(len(nums)) ]

print(n)

输出:

[([1], [1, 3, 5, 2, 3, 4, 4]), ([1], [3, 5, 2, 3, 4, 4]), ([1, 1], [5, 2, 3, 4, 4]), ([1, 1, 3], [2, 3, 4, 4]), ([1, 1, 3, 5], [3, 4, 4]), ([1, 1, 3, 5, 2], [4, 4]), ([1, 1, 3, 5, 2, 3], [4]), ([1, 1, 3, 5, 2, 3, 4], [1])]

根据您的最终目标,before/after 当前号码似乎不需要两个单独的列表。相反,连接它们并应用 prod。这样你就不用担心空列表的问题了。

from math import prod

nums = [1, 1, 3, 5, 2, 3, 4, 4]

prods = [prod(nums[:i] + nums[i+1:]) for i in range(len(nums))]
print(prods) # [1440, 1440, 480, 288, 720, 480, 360, 360]