Ant*_*lix 1 python list-comprehension
我发现列表理解语法非常有用且紧凑.一直使用它后,它让我想在列表外使用它,例如我想改变:
s="sausages hamsters"
intermediate=" and "
word1,word2=s.split()
s2=word1+intermediate+word2
成
word1,word2=s.split()
s2=word1+intermediate+word2 for word1,word2 in s.split
显然它不起作用.我在这里遗漏了什么,或者这根本不可能在一行中完成?
编辑:当然这个例子很愚蠢但在某些情况下我可以看到这个节省多行
编辑:我刚刚编写了示例,以使其阅读更加愉快,但我的问题的更多文字版本将是:
"在一个声明中,有没有办法以这种方式创建变量:
newVar= <expression using still undefined variables> \  
        <some keyword or symbols> \  
         <declaration of pre-cited undefined variables>
就像列表理解允许这样做:
newList=[<expression using still undefined variables>  
    for <declaration of pre-cited undefined variables, as result of an iterator>]
如果我们可以建立列表,是否也可以用于简单的单个对象?"
你想要str.join()这里:
' and '.join(s.split())
每当你想连接多个字符串时,在字符串之间有或没有文本,str.join()就可以更快地选择每个字符串连接.
由于str.join()采用可迭代的参数,您可以将生成器表达式和列表推导用于您的内容.列表理解会更好(因为它更快str.join())
至于更"通用"的列表理解式语法; 在生成器表达式,各种理解格式(列表,集合和字典)和next()函数之间,你真的不需要更复杂的语法.
请记住,可读性也很重要; 不要尝试在循环没有意义的情况下应用循环.作为反模式,您的"循环中的一个对象"示例可能是:
result = next(a + foo + b for a, b in (s.split(),))
我把s.split()结果单独分配到生成器表达式中.表达式很难解析,你不应该仅仅为了想要使用不需要循环的循环而使用它.
| 归档时间: | 
 | 
| 查看次数: | 361 次 | 
| 最近记录: |