首页 > 解决方案 > Python和Java的for循环区别

问题描述

在 Python 中,我们执行 for 循环,例如:

for i in range(len(nums))

在java中:我们有:

for (int i = 0; i < nums.length; i++)

这两个for循环是否相同?如果我们在 for 循环中进行了一些更改,假设在 for 循环中 i 已加 3,对于 Java,for 循环中的下一个 i 将是 4?而 Python 仍然从 2 开始

Leetcode 594. 最长和谐子序列。

我们将和谐数组定义为最大值与最小值之差正好为 1 的数组

用Java编写的解决方案如下:

nums=[1,3,2,2,5,2,3,7]
public class Solution {
    public int findLHS(int[] nums) {
        Arrays.sort(nums);
        int prev_count = 1, res = 0;
        for (int i = 0; i < nums.length; i++) {
            int count = 1;
            if (i > 0 && nums[i] - nums[i - 1] == 1) {
                while (i < nums.length - 1 && nums[i] == nums[i + 1]) {
                    count++;
                    i++;
                }
                res = Math.max(res, count + prev_count);
                prev_count = count;
            } else {
                while (i < nums.length - 1 && nums[i] == nums[i + 1]) {
                    count++;
                    i++;
                }
                prev_count = count;
            }
        }
        return res;
    }
}

我转换为 Python:

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

nums=sorted(nums)
prev_count=1
res=0
i=0
for i in range(len(nums)-1):
    count=1
    if i>0 and nums[i]-nums[i-1]==1:
        while i<len(nums)-1 and nums[i] == nums[i+1]:
            count+=1
            i+=1
        res=max(res,count+prev_count)
        prev_count=count
    else:
        while i<len(nums)-1 and nums[i] == nums[i+1]:
            count+=1
            i+=1

        prev_count=count

print (res)


在 Java 中

for (int i = 0; i < nums.length; i++) {
            int count = 1;
            if (i > 0 && nums[i] - nums[i - 1] == 1) {
                while (i < nums.length - 1 && nums[i] == nums[i + 1]) {
                    count++;
                    i++;
                }

i++ 在 for 循环中,所以 i 从添加的任何内容开始。

在 Python 中:

for i in range(len(nums)-1):
    count=1
    if i>0 and nums[i]-nums[i-1]==1:
        while i<len(nums)-1 and nums[i] == nums[i+1]:
            count+=1
            i+=1

在 i+=1 之后,它只适用于 While 循环,for 循环仍然从 i=2 而不是 4 开始。

当 python 为 4 时,Java 返回答案为 5。我调试代码,看起来 Java 开始 i 为任何 i 添加,而 Python 没有添加 i 并且总是从最后一个 i 开始。

标签: javapython-3.x

解决方案


在 java 中,for 循环语义是从 C 中借用的。

for (<initilization>; <termination condition>; <what to do in after each iteration>)

在开始时做一些事情(初始化),然后直到达到某个条件(终止条件),做一些事情以取得进展(每次迭代后要做什么)。惯用的 for 循环 withi有效,因为迭代的状态保持在i. 因此,如果您i对循环体进行更改,迭代的状态也会发生变化。

python 语法类似于bash循环:

for i in some_iterable:

这里i接受来自 的每个值,some_iterable并且循环对 的每个值运行一次i。如果你i在循环体内改变,没关系;i在下一次迭代期间从可迭代对象中分配下一个值。循环的状态保持在可迭代对象中,而不是i. i正是让您访问可迭代的当前值的原因。


推荐阅读