Performance 这是一个效率与可维护性和可读性对比的例子吗?列表理解Python

Performance 这是一个效率与可维护性和可读性对比的例子吗?列表理解Python,performance,python-3.x,logic,list-comprehension,Performance,Python 3.x,Logic,List Comprehension,我在做一个叫二和的leet代码问题,如下所示: 给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标 您可以假设每个输入都有一个解决方案,并且不能两次使用同一个元素 例如: 给定nums=[2,7,11,15],target=9 因为nums[0]+nums[1]=2+7=9, 返回[0,1] 我写的代码是: def twoSum(self, nums, target): """ :type nums: List[int] :type target: int

我在做一个叫二和的leet代码问题,如下所示:

给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标

您可以假设每个输入都有一个解决方案,并且不能两次使用同一个元素

例如:

给定nums=[2,7,11,15],target=9

因为nums[0]+nums[1]=2+7=9, 返回[0,1]

我写的代码是:

def twoSum(self, nums, target):
    """
    :type nums: List[int]
    :type target: int
    :rtype: List[int]
    """
    return [num for num in nums if (target-num) in nums and (target-num) != num] 
这算不算太深奥了?有没有更快的方法可以在不损失可读性的情况下完成这项任务?对我来说,这似乎清晰易懂,但我想让其他人检查一下

我理解效率与可读性之争的警告:我并不是在试图让一个程序更有效率。这纯粹是一个教育问题,是为了我自己的利益(我想也是为了自我);我只是想知道这是否是首选的攻击方法


提前谢谢

似乎根据假设,如果两次使用相同的数字被认为是重复的结果,那么您只需要执行“return[num for num in nums if(target num in nums)]。同样的要求是获取两个数字的索引,但是twoSum返回实际的数字。我认为您的方法是好的。但是使用常规循环可能有一个优势,因为您可以在找到解决方案后立即返回。如果列表的平均大小很大,那么收益可能会很大。此外,任何对编码问题网站(比leetcode更适合提交问题的在线IDE令人憎恶)或pythonic首选方法和算法的引用都会受到极大的赞赏。谢谢@shipping,没有考虑到列表的大小在增加。