1

所以我目前正在尝试定义一个函数来查看两个字符串并告诉用户一个字符串是否位于另一个字符串中,它看起来像这样:

def isIn(x, y):

    for x in y:
        if x == y:
            print "True"
            print "x in y"
        else:
            print "False"

    for y in x:
        if x == y:
            print "True"
            print "y in x"
        else:
            print "False"

isIn('5', '1')

我认为这与 (y) 函数中的 for(x) 有关,但我可能错了。代码不断出现:

True
x in y
True 
y in x

关于我如何解决这个问题的任何建议?

4

5 回答 5

3

更简单的东西怎么样?

def isIn(x, y):
    return x in y or y in x

如果我们正在处理整个字符串并且我们有兴趣知道一个是否是另一个的一部分,则无需遍历它们的每个字符 - 这只会告诉您两个字符串中是否有一些字符。

现在,如果您真的需要知道两个字符串中是否有一些字符,这会很好:

def isIn(x, y):
    return any(c in y for c in x)
于 2013-06-22T17:44:08.993 回答
3

我认为您for ... in只是对 plain感到困惑in

def isIn(x,y):

  if x in y:
    print "True"
    print "x in y"
  else:
    print "False"

  if y in x:
    print "True"
    print "y in x"
  else:
    print "False"

isIn('5','1')
于 2013-06-22T17:45:53.243 回答
2
for x in y:

x这里不是x传递给函数的。相同的:

if x == y:

xinfor循环将迭代y并且将是1. 然后你将它与 比较y,它1也是。因此,您会得到预期的输出:

True
x in y

第二个循环也一样

于 2013-06-22T17:42:03.507 回答
1

你在这里有一些循环问题:

for x in y:
    # at this point, x is the first element of '1', so both x and y are '1'
    # thus, x == y, which explains the behavior that you see

第二个循环同上

于 2013-06-22T17:41:47.930 回答
0

您的问题几乎可以肯定是您的代码没有按照您的想法执行:

def isIn(x, y):

    for x in y:
        pass # abbreviated for brevity. Makes no difference here

    for y in x:
        pass #ditto

您的第一个for x in y顺序分配xy. 最后,x留下 中的最后一个值y。然后,您的下一个循环重用变量 name y,并将其按顺序绑定到上一个循环的最后一个值中的每个元素x

这不会在您的示例中导致错误,因为字符串的每个元素都是长度为 1 的字符串,因此是可迭代的(但只能产生一个值等于自身的对象)。

于 2013-06-22T19:02:36.083 回答