Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
写一篇「;“暂时”;Python中的循环_Python_Python 2.7_Python 3.x - Fatal编程技术网

写一篇「;“暂时”;Python中的循环

写一篇「;“暂时”;Python中的循环,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,什么是Pythonic(2.7,3)方式来编写一个for循环,并带有提前停止的条件 比如说 for item in lst: if not condition(item): break process(item) 默认答案:它的书写方式 for item in lst: if not condition(item): break process(item) 默认答案:它的书写方式 for item in lst: if

什么是Pythonic(2.7,3)方式来编写一个for循环,并带有提前停止的条件

比如说

for item in lst:
    if not condition(item):
        break
    process(item)

默认答案:它的书写方式

for item in lst:
    if not condition(item):
        break
    process(item)

默认答案:它的书写方式

for item in lst:
    if not condition(item):
        break
    process(item)

你的方式看起来很棒!我通常会这样写:

for i in lst:
    if i > k:
        break
    process(i)
(不需要显式索引)。或者如果你觉得饿了:

map(process, it.takewhile(lambda i: i < k, lst))
map(进程,it.takewhile(lambda i:i
你的方式看起来很棒!我通常会这样写:

for i in lst:
    if i > k:
        break
    process(i)
(不需要显式索引)。或者如果你觉得饿了:

map(process, it.takewhile(lambda i: i < k, lst))
map(进程,it.takewhile(lambda i:i
您可以使用:

从文件中:

itertools.takewhile(谓词,iterable)

生成一个迭代器,只要谓词为true,它就会从iterable返回元素


要查找通用前缀,例如:

def common_prefix(s1, s2):
    return "".join(a for a, _ in takewhile(lambda t: t[0] == t[1], zip(s1, s2)))
您可以使用:

从文件中:

itertools.takewhile(谓词,iterable)

生成一个迭代器,只要谓词为true,它就会从iterable返回元素


要查找通用前缀,例如:

def common_prefix(s1, s2):
    return "".join(a for a, _ in takewhile(lambda t: t[0] == t[1], zip(s1, s2)))

有人试图建立一种新的列表理解语法,该语法结合了
takewhile
的思想

在这种格式下,代码可以写成[糟糕的列表理解方式,一行迭代,没有价值,答案本身不会给出,因为担心易受影响的头脑会受到附带损害]

对于“两个字符串的公共前缀”问题,我们有如下内容:

def commonprefix(s1, s2):
    return ''.join(x for x, y in zip(s1, s2) while x==y)

不幸的是,这些尝试似乎没有得到任何令人满意的结果:

有人试图为列表理解建立一种新的语法,其中包含了
takewhile
的思想

在这种格式下,代码可以写成[糟糕的列表理解方式,一行迭代,没有价值,答案本身不会给出,因为担心易受影响的头脑会受到附带损害]

对于“两个字符串的公共前缀”问题,我们有如下内容:

def commonprefix(s1, s2):
    return ''.join(x for x, y in zip(s1, s2) while x==y)


不幸的是,这些尝试似乎没有得到任何令人满意的结果:

我不想解决一个特定的问题。这不是很有帮助。正确的方法取决于是否要处理所有项
,最初的问题是查找两个字符串的公共前缀的长度。您可以使用
os.path.commonprefix
,但它让我想知道如何尽早停止
for
循环。如果您想知道的话,上面的代码没有bug(以那种方式);我编辑了我的答案,以演示如何使用
itertools
中的
takewhile
实现此目的。我不想解决特定问题。这并没有太大帮助。正确的方法取决于是否要处理所有项
,最初的问题是查找两个字符串的公共前缀的长度。您可以使用
os.path.commonprefix
,但它让我想知道如何尽早停止
for
循环。如果您想知道的话,上面的代码没有bug(以那种方式);我已经编辑了我的答案,以演示如何使用
itertools
中的
takewhile
实现此目的。过滤方式不会在第一次失败时停止。过滤方式不会在第一次失败时停止。迭代(我假设是)
n=len(lst)
;直接迭代
lst
,或者如果实际需要索引,则迭代
枚举它。
n
可能已预先计算为一个界限。我并不是说问题是关于一个实际的列表,尽管这是我的错。然后你可以做:
对于索引,枚举中的项(无论什么):if index>bound或condition(item):break;流程(项目)
。如果
len(无论什么)
,这个就不会坏。我知道。我想举个简单的例子。我简化了示例并更新了问题。迭代(我假设的是)
n=len(lst)
;直接迭代
lst
,或者如果实际需要索引,则迭代
枚举它。
n
可能已预先计算为一个界限。我并不是说问题是关于一个实际的列表,尽管这是我的错。然后你可以做:
对于索引,枚举中的项(无论什么):if index>bound或condition(item):break;流程(项目)
。如果
len(无论什么)
,这个就不会坏。我知道。我想举个简单的例子。我简化了示例并更新了问题。看起来不错,但似乎您在列表理解中缺少了您的
[]
。在功能状态下,我可能更喜欢
返回s1[:len(list(itertools.takewhile(operator.eq,s1,s2))]
,尽管takewhile不幸地没有接受多个iterables。我必须仔细阅读论证展开式。@Victory,这是一个生成器表达式。如果genexp是唯一的参数,那么它不需要参数。@leewangzhong-很有趣,那么为什么
打印“”。如果a<4,那么join(a代表xrange(3)中的a)
抛出一个
TypeError
?我看不出lambda如何接受两个参数。在Python 3中应该是
lambda(a,b):
lambda-pair:pair[0]==pair[1]
?看起来不错,但在列表理解中似乎缺少了
[]
。在函数式的气氛中,我可能更喜欢
返回s1[:len(list(itertools.takewhile(operator.eq,s1,s2))]
,尽管takewhile不幸地不接受多个iterables。我必须仔细阅读论证展开式。@Victory,这是一个生成器表达式。如果genexp是唯一的参数,那么它不需要参数。@leewangzhong-很有趣,那么为什么
打印“”。如果a<4,那么join(a代表xrange(3)中的a)
抛出一个
TypeError
?我看不出lambda如何接受两个参数。应该是
lambda(a,b):
lamb