比较python和java/c中的循环
我正在尝试将以下代码从Java转换为Python,这是输入:比较python和java/c中的循环,java,python,c++,loops,for-loop,Java,Python,C++,Loops,For Loop,我正在尝试将以下代码从Java转换为Python,这是输入: commonPrefix("", "something"), //one string is "" commonPrefix("some", "something"), " //for loop finishes commonPrefix("someother", "something") //for loop breaks Java/C++代码: String commonPrefix(String str1, String st
commonPrefix("", "something"), //one string is ""
commonPrefix("some", "something"), " //for loop finishes
commonPrefix("someother", "something") //for loop breaks
Java/C++代码:
String commonPrefix(String str1, String str2){
int len = min(len(str1), len(str2));
for (int i = 0; i< len; i++) {
if (str1[i] != str2[i]) break;
}
return str1.substring(0,i);
}
你不需要为你的最终返回语句切片,如果它达到这一点,那么整个单词已经匹配,所以你可以只返回整个单词。至于检查单词是否为空,如果
len(str1)==0或len(str2)==0,那么for循环将不会运行,您只需要返回两个值中的最小值
def commonPrefix(str1, str2):
length = min(len(str1), len(str2))
for i in range(length):
if str1[i] != str2[i]:
return str1[0:i]
return min(str1, str2)
print(commonPrefix("something", "something"))
>> something
print(commonPrefix("someother", "something"))
>> some
print(commonPrefix("", "something"))
>> ""
print(commonPrefix("something", ""))
>> ""
错误出现在函数的第一行:len=min(len(str1),len(str2))
。您正在用结果覆盖len函数。我假设,由于您在尝试使用len函数的同一行上执行此操作,python认为变量尚未定义。下面是一个如何修复它的示例
def commonPrefix(str1, str2):
min_length = min(len(str1), len(str2))
for i in range(min_length):
if str1[i] != str2[i]:
return str1[:i]
return str1
其他答案已经充分回答了这个问题,但是对于itertools
中的takewhile
,列表理解也可以做同样的事情
from itertools import takewhile
def common_prefix(s1, s2):
return ''.join([c[0] for c in takewhile(lambda x: x[0] == x[1], zip(s1, s2))])
我的三分钱
def common_prefix( s1, s2 ):
i, l = 0, min( len( s1 ), len( s2 ) )
while i < l and s1[i] == s2[i]: i += 1
return s1[:i]
print( "\"{}\"".format( common_prefix( "", "something" ) ) )
print( "\"{}\"".format( common_prefix( "some", "something" ) ) )
print( "\"{}\"".format( common_prefix( "someother", "something" ) ) )
def公共_前缀(s1、s2):
i、 l=0,最小值(透镜(s1),透镜(s2))
而i
你把一切都搞砸了。在Java中,您无法像正在尝试的那样从字符串中获取字符。这个代码甚至不会编译。C++中没有“代码”>字符串类型,除非您自己编写或从库中获得它。我使用JavaAyt,Python约定是使用SnaKeKEY函数名称。因此,函数名应该是common_prefix
。应该返回min(str1,str2)ic,您使用while来绕过索引问题,我感到困惑。如果您感到困惑,为什么要接受答案?它甚至没有回答被问到的问题。这是方法名称的解决方案@user389955@AK47我认为这并不是令人困惑的答案。正是在原始代码中使用索引混淆了::@VladfromMoscow是其bigdadyrep偏好。我打赌他一定被你的答案弄糊涂了,这对Python新手来说很难理解&这个家伙正在努力为循环编写代码/salt@AK47. 我正在学习python,所以我试图用python重写一些java代码。我认为“for I in range(length)”和“for(int I=0;Idef common_prefix( s1, s2 ):
i, l = 0, min( len( s1 ), len( s2 ) )
while i < l and s1[i] == s2[i]: i += 1
return s1[:i]
print( "\"{}\"".format( common_prefix( "", "something" ) ) )
print( "\"{}\"".format( common_prefix( "some", "something" ) ) )
print( "\"{}\"".format( common_prefix( "someother", "something" ) ) )