python - 为什么第二个嵌套 for 循环在迭代期间跳过重复值?
问题描述
j=1
如果我将列表输入为,为什么第二个 for 循环 (j) 在迭代期间会跳过[3,3,4]
?我希望 answer_list[0,1]
在运行之后。
如果我将列表输入为[1,2,4]
.
class Solution:
def twoSum(self, nums: object, target: object) -> object:
Answer_list = []
for i in nums:
print("i_index:", nums.index(i))
for j in nums:
print("j_index:" ,nums.index(j))
if target - i - j == 0:
print (i,j)
Answer_list.append(nums.index(i))
Answer_list.append(nums.index(j))
print("Answer List:", Answer_list)
return list(set(Answer_list))
s=Solution()
print(s.twoSum([3,3,4], 6))
解决方案
问题是它将返回第一次出现nums.index(j)
的索引。所以它永远不会返回 1 。[3, 3, 4].index(3)
为了让它工作,迭代enumerate(nums)
,因为这也会给你索引:
def twoSum(self, nums: object, target: object) -> object:
Answer_list = []
for i_index, i in enumerate(nums):
print("i_index:", i_index)
for j_index, j in enumerate(nums):
print("j_index:" , j_index)
if target - i - j == 0:
print (i,j)
Answer_list.append(i_index)
Answer_list.append(j_index)
print("Answer List:", Answer_list)
return list(set(Answer_list))
您还可以通过仅在列表中提前搜索内部循环来避免一些无用的迭代。可能是这样的:
for j_index, j in enumerate(nums[i_index+1:]):
print("j_index:" , j_index+i_index+1)
if target - i - j == 0:
print (i,j)
Answer_list.append(i_index)
Answer_list.append(j_index+i_index+1)
print("Answer List:", Answer_list)
推荐阅读
- excel - VBA从数组解释中获取唯一值
- angular - 如何比较对象数组的键以及是否具有相同的键如何检查值是否不同并将其存储在数组中
- bash - 从 Jenkins 运行脚本时找不到环境变量
- java - 如何在 Android 中使用 WebView 获取身份验证令牌?
- python - 如何将使用数据重塑为按分钟的格式?
- c++ - 循环直到没有遇到 std::vector 的任何元素
- java - 如何在不了解标识符的情况下向聚合发送命令?
- swift - 如何快速解码来自 Firebase Firestore 的时间戳
- java - JSP中arraylist.get(int i)方法的问题
- excel - 从范围内填充用户窗体上的组合框