列出理解据/h1>
一种据strong>列出理解据/strong>是一些计算机编程语言中可用的一种结构,允许创建据a target="_blank" rel="nofollow" href="//www.parkandroid.com/wiki/lists/">列表据/a>来自其他列表。它用据a target="_blank" rel="nofollow" href="#set-builders">设定建筑物据/a>符号以直观和优雅的方式允许这种功能。据/p>
从其他列表中创建列表在计算机编程中很有用。在操作,分析或转换数据时,这是完全正确的。您可以获取数据值列表并快速输出某些修改版本的该数据。据/p>
设置建筑符号是一种描述新组作为与Exisitng集的关系的方式。这种关系可以具有传入集改变的功能,并且追溯传入集的谓词。据/p>
列表理解用于多种语言。它们最常见于动物据a href="//www.parkandroid.com/wiki/functional-languages/?wiki_title=functional languages" class="wiki_link new" title="功能语言" target="_blank" rel="nofollow">功能语言据/a>喜欢Haskell和Scala和据a href="//www.parkandroid.com/wiki/scripting/?wiki_title=scripting languages" class="wiki_link new" title="脚本语言" target="_blank" rel="nofollow">脚本语言据/a>比如Python和Perl。它们通常比构建列表的其他方法(例如据a href="//www.parkandroid.com/wiki/for/" class="wiki_link" title="对于循环" target="_blank">对于循环据/a>. 此外,它们的符号更紧凑,通常更容易阅读,更优雅。据/p>
Python中列表理解的示例:据/p>
1 2 3 4据/pre> |
|
内容据/h4>
集合建设者据/h2>
以下是集合生成器符号的示例:据/p>
设置生成器表示法留在旧的据a target="_blank" rel="nofollow" href="//www.parkandroid.com/wiki/sets/">放据/a>那据span class="katex">
哈斯克尔据/h2>
Haskell是一个受欢迎的人据a href="//www.parkandroid.com/wiki/functional-programming/" class="wiki_link" title="功能编程语言" target="_blank">功能编程语言据/a>。因为Haskell是由数学启示的推动,特别是据a href="//www.parkandroid.com/wiki/lambda-calculus/" class="wiki_link" title="λ演算" target="_blank">λ演算据/a>和据a href="//www.parkandroid.com/wiki/category-theory/" class="wiki_link" title="范畴论" target="_blank">范畴论据/a>,Mathematician在Haskell中的列表综合性更加舒适。据/p>
生成所有名称的列表,该名称是可构造的作为以下名称和姓氏的组合:据/strong>
1 2据/pre>first_names.据/span>=据/span>[据/span>“凯文”据/span>那据/span>“克里希纳”据/span>那据/span>“kaboobly”据/span>]据/span>姓氏据/span>=据/span>[据/span>“林”据/span>那据/span>“ar”据/span>那据/span>“做”据/span>那据/span>“萝卜”据/span>]据/span>
以下代码很好地完成了这项工作:据/p>
1据/pre>[据/span>名据/span>++据/span>" "据/span>++据/span>姓据/span>|据/span>名据/span><-据/span>first_names.据/span>那据/span>姓据/span><-据/span>姓氏据/span>]据/span>
另一个优点是,因为Haskell使用据a href="//www.parkandroid.com/wiki/lazy-evaluation/?wiki_title=lazy evaluation" class="wiki_link new" title="惰性评估" target="_blank" rel="nofollow">惰性评估据/a>,也可以制作无限的组。延迟评估是一个编程评估策略,延迟了表达式的评估,直到需要它。据/p>
写一个哈克尔表示为这组据E.m>全部的据/em>自然方块。用据E.m>拿据/em>获取该列表的前10个元素。据/strong>
以下是该组自然方块的良好定义:据/p>
1据/pre>广场据/span>=据/span>[据/span>X据/span>^据/span>2据/span>|据/span>X据/span><-据/span>[据/span>1据/span>..据/span>]]据/span>
在这里,据code>[1 ..]据/code>表示自然数的集合。据/p>
我们可以使用据code>拿据/code>以这种方式从中获取前几个整数:据/p>
1据/pre>拿据/span>10.据/span>广场据/span>
显然,可以添加一个或多个用逗号分隔的子句以进行进一步筛选。据/p>
以下是表示奇数自然数立方体列表的好方法:据/p>
1据/pre>奇数奇数据/span>=据/span>[据/span>X据/span>^据/span>3.据/span>|据/span>X据/span><-据/span>[据/span>1据/span>..据/span>],据/span>奇怪的据/span>X据/span>]据/span>
python据/h2>
List Python中的全面融合也很有用效率。它们由表达组成,其次是一个据a href="//www.parkandroid.com/wiki/for/" class="wiki_link" title="for循环" target="_blank">for循环据/a>在生成器列表中迭代,后跟零个或多个FOR,后跟一个或多个FOR据a href="//www.parkandroid.com/wiki/boolean-expressions/?wiki_title=boolean expressions" class="wiki_link new" title="布尔表达式" target="_blank" rel="nofollow">布尔表达式据/a>,如有必要,用于过滤。据/p>
下面是如何使用列表理解来评估前10个完美正方形:据/p>
1据/pre>[据/span>X据/span>**据/span>2据/span>为了据/span>X据/span>在据/span>Xrange.据/span>(据/span>1据/span>那据/span>11.据/span>)]据/span>
我们可以通过这种方式剔除偶数正方形:据/p>
1据/pre>[据/span>X据/span>**据/span>2据/span>为了据/span>X据/span>在据/span>Xrange.据/span>(据/span>1据/span>那据/span>11.据/span>)据/span>如果据/span>X据/span>%据/span>2据/span>]据/span>
让我们从Python中的Haskell部分执行名称示例:据/p>
1 2 3 4 5据/pre>>>>据/span>first_names.据/span>=据/span>[据/span>“凯文”据/span>那据/span>“克里希纳”据/span>那据/span>“kaboobly”据/span>]据/span>>>>据/span>姓氏据/span>=据/span>[据/span>“林”据/span>那据/span>“ar”据/span>那据/span>“做”据/span>那据/span>“萝卜”据/span>]据/span>>>>据/span>component_names.据/span>=据/span>[据/span>名据/span>+据/span>" "据/span>+据/span>姓据/span>为了据/span>名据/span>在据/span>first_names.据/span>为了据/span>姓据/span>在据/span>姓氏据/span>]据/span>>>>据/span>component_names.据/span>[据/span>‘林嘉文’据/span>那据/span>'Calvin Ar'据/span>那据/span>'Calvin Do'据/span>那据/span>'Calvin胡萝卜'据/span>那据/span>“林克里希纳”据/span>那据/span>“克里希纳·阿尔”据/span>那据/span>'克里希纳做'据/span>那据/span>“克里希纳胡萝卜”据/span>那据/span>“卡布林”据/span>那据/span>'kaboobly ar'据/span>那据/span>“非常乐意”据/span>那据/span>“可食用的胡萝卜”据/span>]据/span>
在Python中,列出的列表创建通常更希望比其他方法(例如循环)更为希望。以下是如果在Python中使用循环,人们如何在1到10中制作数字1到10的列表。据/p>
1 2 3 4 5 6据/pre> |
|
这是使用列表理解的相同过程。据/p>
1 2 3据/pre> |
|
显然,使用列表理解使用更少的代码(这总是一件好事)。然而,你可能会惊讶地发现它也是据E.m>更快据/em>。据/p>
示例问题据/p>
在Python中编写列表理解,该Python在1和100之间创建一个数字的数字列表,该列表可分离为7或可分解9。据/p>
这可以通过在列表理解中使用布尔逻辑在一起一串谓词来完成。据/p>
1 2据/pre>>>>据/span>[据/span>X据/span>为了据/span>X据/span>在据/span>范围据/span>(据/span>1据/span>那据/span>101据/span>)据/span>如果据/span>X据/span>%据/span>7.据/span>==据/span>0.据/span>或据/span>X据/span>%据/span>9.据/span>==据/span>0.据/span>]据/span>[据/span>7.据/span>那据/span>9.据/span>那据/span>14.据/span>那据/span>18.据/span>那据/span>21.据/span>那据/span>27.据/span>那据/span>28.据/span>那据/span>35.据/span>那据/span>36.据/span>那据/span>42.据/span>那据/span>45.据/span>那据/span>49.据/span>那据/span>54.据/span>那据/span>56.据/span>那据/span>63.据/span>那据/span>70据/span>那据/span>72.据/span>那据/span>77.据/span>那据/span>81.据/span>那据/span>84.据/span>那据/span>90.据/span>那据/span>91.据/span>那据/span>98.据/span>那据/span>99.据/span>]据/span>
其他类型的全面化据/h2>
某种语言提供适用于更多的其他方式据a href="//www.parkandroid.com/wiki/linear-data-structures/" class="wiki_link" title="数据结构" target="_blank">数据结构据/a>不仅仅是据a href="//www.parkandroid.com/wiki/lists/" class="wiki_link" title="列表" target="_blank">列表据/a>。据/p>
例如,Python提供据strong>制定全身据/strong>和据strong>字典识别据/strong>。这些构造在它们各自的数据结构上执行与列表的相同操作。据/p>
示例问题据/h2>
这是Python中的一个多部分问题。首先,创建来自的小写字符列表据code>'一种'据/code>到据code>'G'据/code>使用列表理解。据/p>
接下来,制作一个字典,将该列表中的一个字符映射到一个数字。映射应该是据code>'a':0,'b':1,...,'g':6据/code>。据/p>
最后,仅在值偶数时,使包括(key,值)对的新列表。如果该值甚至不是,则附加字符串据code>“奇怪的”据/code>列表。此最终列表应与初始列表相同。据/p>
提示1:据/p>
您可以在Python中制作一个字符列表据a href="//www.parkandroid.com/wiki/casting/?wiki_title=casting" class="wiki_link new" title="铸造" target="_blank" rel="nofollow">铸造据/a>到据code>细绳据/code>键入据code>整数据/code>类型。据/p>
1 2据/pre>>>>据/span>[据/span>CHR.据/span>(据/span>一世据/span>)据/span>为了据/span>一世据/span>在据/span>Xrange.据/span>(据/span>97.据/span>那据/span>100据/span>)]据/span>[据/span>'一种'据/span>那据/span>'B'据/span>那据/span>'C'据/span>]据/span>
提示2:据/p>
您可以将布尔表达式字符串在列表的理解中,包括if / else语句。所以,你可以在python中写下这样的东西据/p>
1 2 3据/pre>>>>据/span>努姆斯据/span>=据/span>[据/span>1据/span>那据/span>5.据/span>那据/span>9.据/span>]据/span>>>>据/span>[据/span>X据/span>如果据/span>X据/span>>据/span>6.据/span>别的据/span>X据/span>*据/span>2据/span>为了据/span>X据/span>在据/span>努姆斯据/span>]据/span>[据/span>2据/span>那据/span>10.据/span>那据/span>9.据/span>]据/span>
1 2 3 4 5 6 7 8 9据/pre>>>>据/span>第1部分据/span>=据/span>[据/span>CHR.据/span>(据/span>一世据/span>)据/span>为了据/span>一世据/span>在据/span>Xrange.据/span>(据/span>97.据/span>那据/span>104据/span>)]据/span>>>>据/span>第1部分据/span>[据/span>'一种'据/span>那据/span>'B'据/span>那据/span>'C'据/span>那据/span>'D'据/span>那据/span>'e'据/span>那据/span>'F'据/span>那据/span>'G'据/span>]据/span>>>>据/span>第2部分据/span>=据/span>{据/span>价值据/span>:据/span>钥匙据/span>为了据/span>钥匙据/span>那据/span>价值据/span>在据/span>枚举据/span>(据/span>第1部分据/span>)}据/span>>>>据/span>第2部分据/span>{据/span>'一种'据/span>:据/span>0.据/span>那据/span>'C'据/span>:据/span>2据/span>那据/span>'B'据/span>:据/span>1据/span>那据/span>'e'据/span>:据/span>4.据/span>那据/span>'D'据/span>:据/span>3.据/span>那据/span>'G'据/span>:据/span>6.据/span>那据/span>'F'据/span>:据/span>5.据/span>}据/span>>>>据/span>第3部分据/span>=据/span>[据/span>钥匙据/span>如果据/span>第2部分据/span>[据/span>钥匙据/span>]据/span>%据/span>2据/span>==据/span>0.据/span>别的据/span>“奇怪的”据/span>为了据/span>钥匙据/span>在据/span>第2部分据/span>]据/span>>>>据/span>第3部分据/span>[据/span>'一种'据/span>那据/span>'C'据/span>那据/span>“奇怪”据/span>那据/span>'e'据/span>那据/span>“奇怪”据/span>那据/span>'G'据/span>那据/span>“奇怪”据/span>]据/span>