gpt4 book ai didi

java - Python 和 Java 之间的 For 循环区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:03 25 4
gpt4 key购买 nike

在 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 开始 i

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 开始。

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

最佳答案

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

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

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

python 语法类似于 bash 循环:

for i in some_iterable:

此处 isome_iterable 获取每个值,并且循环为 i 的每个值运行一次。如果您在循环体内更改 i ,没关系; i 在下一次迭代期间被分配给 iterable 的下一个值。 循环的状态在可迭代对象中维护,而不是 ii 正是让您访问可迭代对象的当前值的原因。

关于java - Python 和 Java 之间的 For 循环区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com