取除当前元素以外的所有元素
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]
我想获取列表中除当前元素之外的所有元素。这是列表:
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]