Python列表:如果一对数字等于0,则返回元素的位置

时间:2016-11-08 22:33:59

标签: python python-2.7 nested-lists

我正在尝试编写一个包含列表或数组的python函数。如果列表或数组中的任何两个数字等于零,我想返回这两个数字的位置。

这是我到目前为止所拥有的。我遍历列表并有一个相同列表的嵌套循环来测试外部迭代器加上嵌套迭代器== 0:如果是,那么我试图返回两个数字的位置== 0.但它只是给我实际的两个数字。什么是奇怪的是下面的输出(即使它不是我想要的)应该是(3,-3)。任何意见都将非常感谢

def twosum(nums):
    for x in nums:
        for y in nums:
            if x + y == 0:
                return nums[x],nums[y]
print twosum([1, 3, 5, -3])
output  = (-3, 3)

2 个答案:

答案 0 :(得分:3)

在迭代列表时必须使用enumerate(),如:

def twosum(nums):
    for i, x in enumerate(nums):
        for j, y in enumerate(nums):
            if x + y == 0:
                return i, j

然而,这个逻辑可以进一步优化为:

def twosum(nums):
    for i, x in enumerate(nums):
        if -x in nums[i:]:  # check '-'ive of the number in non-iterated list
            return x, -x

答案 1 :(得分:1)

你会做return nums.index(x), nums.index(y)