在python中检查字符串后断开循环

时间:2014-07-18 02:22:01

标签: python iteration

我有以下列表:

str_list = [1,3,"foo bar",10]

我想要做的就是简单地遍历它 打印结果。如果迭代符合“foo bar”,则停止。

我尝试了以下代码:

In [6]: for x in str_list:
   ...:     print x
   ...:     if x is "foo bar":
   ...:         break
   ...:     

继续在“foo bar”之后打印字符串。 它不符合我的预期,即只打印这个:

1
3

这样做的正确方法是什么?

5 个答案:

答案 0 :(得分:2)

您只需在检查后打印即可。如果它是你在支票中寻找的字符串,那就休息吧。像这样:

>>> str_list = [1,3,"foo bar",10]
>>> for item in str_list:
...     if item == 'foo bar':
...         break
...     print item
...
1
3

此外,请务必注意使用is和使用==之间的区别。如此answer中所述,is检查两个变量是否指向同一个对象。 ==检查变量引用的对象是否相等。所以你应该在这里使用==

答案 1 :(得分:2)

itertools.takewhile是专门为此目的编写的,虽然我不是特别的粉丝,因为它通过lambda添加了一个不必要的函数调用,而且通常难以调试

>>> from itertools import takewhile
>>> for elem in takewhile(lambda e: e != "foo bar", str_list):
    print elem


1
3

答案 2 :(得分:1)

在检查所需的字符串后,您需要打印列表中的项目。

for x in str_list:
    if x == "foo bar":
        break
    print(x)

然而,有更多的pythonic方法:

 try:
     foo_idx = str_list.index('foo bar')
 except ValueError:
     print(str_list)
 else:
     print(str_list[:foo_idx])

如果您希望这样可以返回您在问题中显示的格式:

 try:
     foo_idx = str_list.index('foo bar')
 except ValueError:
     print('\n'.join(map(str, str_list)))
 else:
     print('\n'.join(map(str, str_list[:foo_idx])))

答案 3 :(得分:0)

最简单的方法是使用您想要的值进行拆分......

我们说你有清单

s = [1,3,"foo bar",10]

然后,

s[:s.index('foo bar')]

是一个列表,直到'foo bar'的位置。当然,如果' foo bar'不在列表中,然后它会抛出一个错误。然后,您可以将上面的行更改为

s[:s.index('foo bar')] if 'foo bar' in s else s

答案 4 :(得分:0)

str_list = [1,3,"foo bar",10]

for x in str_list:
     if x is "foo bar":
         break
     print x