Python中的算术序列

请先访问http://www.python.org/peps/pep-0204.html. 如您所见,Pep 204被拒绝,主要是因为并不那么明显 句法. 但是IMO这个PEP背后的想法非常好. 所以,也许 有理由采用略微修改的Haskell语法吗? 某物 喜欢 [1,3..10] - > [1,3,5,7,9] (1,3..10) - >与上述相同的值,但返回生成器而不是 列表 [1..10] - > [1,2,3,4,5,6,7,8,9,10] (1 ..) - >产生1,2,3等的"无限"发电机 (-3,-5 ..) - >'无限'发电机,产生-3,-5,-7等 所以, 1)" []"表示列表,"()表示生成器 2)"启动"是必需的,"步骤"和" end"是可选的. 另外,这可以与枚举完美整合(如果他们愿意的话 出现在Python中). Haskell也是这种集成的示例.

# 回答1

我更喜欢在PEP中使用结肠的使用:它是一致的 切片符号以及MATLAB的结肠操作员. 我喜欢这个总体的想法,如果有的话,我可能会经常使用它 但是功能已经存在范围和iRange. bas
# 回答2

" Gregory Petrosyan" 写道: 我喜欢这个问题:Python循环往往是基于0的,所以 虽然表达序列[1..n]很方便,但您通常 想要的是[0 ..(n-1)],这更丑. 如果您想从f(n)倒数到零,在哈斯克尔,你可能会说 [b,b-1 .. 0]其中b = f(n) Python中没有"哪里",那您该怎么办? [f(n)-1,f(n)-2 .. 0] 评估F两次(两次都可能不会获得相同的结果), 而传统 Xrange(f(n)-1,-1,-1) 仅评估一次,但是IMO排斥的. 无论如何,我从不喜欢使用范围或Xrange来控制 Python循环. 这只是kludgy又令人困惑. 所以我想你的想法 有潜力,但必须解决一些问题.
# 回答3

如果我理解PEP正确,则BDFL会拒绝_ Consistentsy_. 至于 我,对于真正不同的任务,拥有类似的语法并不是上帝. [1:10]确实不明显,而[1..10]是.
# 回答4

在2006年1月16日星期一01:01:39 -0800,格雷戈里·彼得罗斯(Gregory Petrosyan)写道: -1关于新语法的引入. 任何新的语法. (如果有人提出语法,我保留改变主意的权利 我喜欢,但总的来说,我 *非常 *很负面地添加到Python的 清洁语法.) 对于有限序列,您的提议并没有为现有 范围和Xrange等解决方案. 此提案唯一添加的功能 介绍是无限的迭代器,它们并不是特别困难 制作: DEF ARITHMETIC_SECERCES(start,step = 1): 产量开始 而1: 开始 +=步骤 产量开始 几何序列的等效发电机作为锻炼 对于读者. 如果您的建议包括对角色范围的支持,我会更多 感兴趣的. - - 史蒂文.
# 回答5

Steven d'Aprano 写道: 有话要说 那. 应该['a'..'z']为列表或 字符串?
# 回答6

保罗·鲁宾(Paul Rubin)写道: 对我来说,最明显的结果要么是一个范围对象 结果,或始终是对象的列表/生成器(保持完美 持续的). 如果一系列数字转化为数字列表, 那么一系列字符也应转换为 字符,并且需要一个加入才能获得常规字符串. 这个 同样,在初始职位的两个建议之间增加了一致性 (例如,基于列表的范围和基于发电机的范围), 基于列表的范围可以扩展到一个基于发电机的字符串中 不能/不应该,抽象断裂(因为两个结构 这应该或多或少的等效物变得截然不同,并且 不能透明地交换). 这也将与提供本地的其他语言一致 "范围"对象,例如Ruby或ADA范围. 关于最初提议的唯一令我感到困扰的是 实际上,不会是任何"范围对象",而只是句法糖 用于列表/发电机创建. 我并不是我真的很介意,但是,好吧, 出于句法糖目的的句法糖确实没有带来 桌子上很多. 对于那些需要(0..n-1)行为的人,Ruby具有某些东西 我觉得很优雅(一开始并不明显),(首先.last) 提供从第一个到最后一个范围,包括两个边界,但是 (第一个...最后)(请注意3个时期)排除 范围定义('a'..'z')是从" a"到'z'的范围 ('a'...'z')仅范围从" a"到" y").
# 回答7

字母范围非常有用,它们在Delphi/ADA中经常使用 语言: " A"," B"," C"," D"," E" ... 我喜欢语法[1..n],对我来说看起来足够自然,但我认为 带有...的红宝石语法不是很自然的. 为避免错误,以下两行必须具有相同的含义: [1..n-1] [1 ..(N-1)] 如果您不想更改Python语法,那么也许 范围/Xrange也可以扩展到字符: Xrange(" A"," Z") 范围(" Z"," A",-1) 但是对于char范围,我认为人们通常不想停止" Y" (如果您也想去" Z"怎么办?这比 想要停止" y"),所以另一种可能性是创建一个新的 像Xrange一样的功能也生成了最后一个元素: 间隔(" a"," c")等于iTer(" ABC") 间隔(1,3)等于ITER([1,2,3]) 间隔(2,0,-1)等于迭代([2,1,0]) 我已经创建了这样的间隔功能,并且时不时地使用它. 再见, 熊
# 回答8

2006年1月16日星期一12:51:58 +0100,Xavier Morel写道: 不,不,我没有. Sheesh,那只是 *尖叫 *"一个错误!!!". python故意 从开始到过去,使用一个简单,一致的索引系统 目的是专门帮助防止路标错误,现在有些人 想破坏这一点. *惊奇地摇头* - - 史蒂文.
# 回答9

保罗·鲁宾(Paul Rubin 盖子>写道: ... 是的,反向(范围(f(n)))要好得多. Alex
# 回答10

保罗·鲁宾(Paul Rubin)写道:哦,[5,4,.. 0]比范围(5,-1,-1)更容易阅读. 但并不比逆转(范围(6))[[两者之一中的5个 句子中的表情必须是一个offbyone ;-)]]] Alex
# 回答11

Steven d'Aprano 写道:不,不,我没有. Sheesh,那只是 *尖叫 *"一个错误!!!". Python故意使用一个简单,一致的索引系统,从一开始到过去的一个末端,以帮助防止路标错误,现在有些人想破坏这一点. *惊奇地摇头* 同意. *如果*我们确实需要偶尔需要"最多x*包括*" 序列,它应该是在语法中无法注意到的,这样 作为范围(x,endincluded = true). Alex
# 回答12

保罗·鲁宾(Paul Rubin)在2006年1月16日星期一02:58:39 -0800写道:哦,[5,4,.. 0]比范围(5,-1,-1)容易阅读. 只有孤立,甚至可以说也不是. 还是您认为Perl 比Python更容易阅读,仅仅是因为您可以编写您的 字符更少的程序? 它看起来太像列表[5,4,0],很容易制作错别字: [5,4,.0]给您没有语法错误,但结果非常不同. 含义并不明确:是否应该是[开始,停止, 步骤](对python切片和范围的人的自然期望) 还是[开始,下一步,停止]? 实际上是第二个,但要回到 格雷戈里(Gregory)的原始帖子:举例说明他仍然错误 将他的提议描述为具有"步骤"参数. 没有步骤 参数 - 通过从下一步减去启动来暗示步骤. 这样的 混乱不是很好. python索引故意进行一端的计数 原因:它有助于防止隔离的路标错误. 这个语法是 反对这一决定,并增加了一件事以记住有关Python的记忆: 最终索引不包括在列表中,除了算术 序列,有时但不一定. 在[5,6,10] 包括索引10; 在[5,7,10]中不是. 我承认,您选择了最尴尬的范围. 但是让我们看一下 在其他几个: [0,.. 9]与范围(10) [55,... 73]与范围(55,74) [1,3,.. len(mystr)]与范围(1,len(mystr)+1,2) [55、65、295]与范围(55、296、10) 您多久发现自己知道序列的前两个术语 但是无论如何步伐不是吗? 这是常见的用例吗? 好吧,那将是itertools.count(开始,步骤),但一般而言,简单的表达式比5行代码更好. 我没有说我的发电机是生产所需的唯一方法 结果,我指出了它的简单性. 是的,Itertools是通往的方式 去做这种事情. 有话要说. ['a'..'z']应该是列表还是字符串? 它使用[某物]语法,因此要与列表和列表保持一致 理解它 LD为列表. 但是字符串更实用,因为列表(['a'..'z'])很容易,并且 比"" .join(['a'..'z']). 但是我不确定是 *这*更实用,应该打破读者的期望. 因此,我认为最好的是创建itertools.chars('a','z')或 类似,而不是新的语法. - - 史蒂文.
# 回答13

Alex Martelli 写道: 怎么样... 因为我在(0..x]中: 等等
# 回答14

Roy Smith 写道:in ... in(0..x]:blah y怎么样 圆形括号和方括号之间的区别可以 很容易被忽略,部分取决于您使用的字体. Alex
# 回答15

,罗伊·史密斯(Roy Smith 这将打破大多数编辑器"突出显示匹配的支撑"功能. 再见, marc'blackjack'rintsch
# 回答16

我很想看到一个漂亮,清晰的语法而不是 对于我在Xrange中(开始,停止,步骤):... 因为Xrange是丑陋的,并且在int序列上进行迭代很重要. 我们不需要范围()替代方案([0:10]或[0..10]) (因为如果有一个不错的话,没有人会使用range() 整数循环) 有一个建议(http://www.python.org/peps/pep-0284.html): 开始<= i
# 回答17

al nyde@mail.comcast.net(Alex Martelli)写道: 嘿,我喜欢那样,倒转(xrange(6))似乎做正确的事 也是如此. 我以前不知道_______. [[句子中两个表达式中的5个必须是一个offbyone ;-)]] 你确定吗? 我很容易错过一些东西,因为很容易 要与这些东西保持一致,但是当我尝试时,我会得到: Python 2.4.1(#1,2005年5月16日,15:19:29) [GCC 4.0.0 20050512(Red Hat 4.0.0-5)]在Linux2上 键入"帮助","版权","学分"或"许可"以获取更多信息. (跳过ASCII艺术横幅): 拥抱98:基于Haskell 98标准 Haskell 98模式:重新启动命令行选项-98启用扩展 类型 :? 求助 拥抱> [5,4..0] [5,4,3,2,1,0] 拥抱> 这是等效的. (当然,必须使用6代替5 范围(...)版本邀请了一个offbyone错误).
# 回答18

Xavier Morel 写道: 我认为这不是有效的异议. Python是Alr Eady充满 句法糖,例如基于压痕的块结构,infix 运算符,具有关键字依赖性语法的语句等.这就是 非常吸引程序员的糖使python远离相对 无糖语言等方案. 确实,许多人都认为python 要成为一种可爱的语言,它们的意思是在一个不错的 方法. 如果需要,您可以将其视为"风味"而不是"糖". 我们 不是在句法极简主义之后,否则我们将使用方案. 这 将类似内容添加到Python的标准应该是是否是否 使语言的味道更好.
# 回答19

感谢您的答复. 因此,一些问题和可能的解决方案: 1)[f(n),f(n)-1 .. 0]可以被解释器轻松捕获,f(n) 只能评估一次. 2)如果您需要正确的边界,我认为[0 .. n)很清楚 (并且与数学一致). 关于式式面包突出显示... 您_really_在此表达式中需要它吗? 顺便说一句,python 可以轻松地扩展编辑/IDE,以支持此语法,甚至 在[0 .. n)中以不同的颜色着色(所以,它将非常 清楚是否包括边框). 但是至于我,[0 .. n-1]更好,因为它看起来更像是普通的 列表,我们在创建发电机的情况下没有问题 排除边界. 3)当然,在某些情况下,"范围"更可读. 至于你 例子: [0,.. 9]与范围(10) [55,... 73]与范围(55,74) [1,3,.. len(mystr)]与范围(1,len(mystr)+1,2) [55、65、295]与范围(55、296、10) a)您在这里使用"魔术" 10 ... [0 .. 10)或[0 .. 9]至少与范围(10)一样好. 还有什么 关于 [1 .. 10]和范围(1,11)? ;-) b)[55 .. 73] vs范围(55,74)? IMO首先更可读. 和你 实际上可以看到最后一个值是什么,而在您认为的"范围"中 类似:"如果在这里写74,那么最后一个值是74-1 = 73" c)[1,3 .. len(mystr)] vs范围(1,len(mystr)+1,2). 至于我 在我了解什么范围之前,应该考虑2-3秒(1, Len(mystr)+1,2)代表:-) [1,3 .. len(mystr)]几乎对每个人来说都是_Obvious_. d)为什么您在范围内写" 296"? 也许,因为你真的是 经验丰富的程序员,您可以自动转换295-> 296 (因为您知道范围函数的行为). 但是如果你的任务 仅仅是通过n1,n2,n3,... n(x-1),nx,nx, 然后[n1 .. nx]看起来更自然,不是吗? 4)建议的语法可以轻松扩展以支持字符(或任何 其他枚举). (也许没有_implied_ :-)步骤参数): ['a'..'d'] - > ['a','b','c','d'](让它成为一致性的列表) ('x'..'z') - >产生'x','y'和z':-)的生成器 ('a'..) - >产生英语字母的发电机 结论: - 我不想完全使用"范围"功能. 感觉 免费使用;-) - 我的提议背后的唯一想法是显而易见的. 至于我 有时很难向一个不熟悉的机智的人解释 H python什么 对于N范围(1,10,2): bla-bla-bla 代表. 当您 需要知道一些 使用它的特殊功能(在这里我的英语都可以吗?)
# 回答20

史蒂文·达·阿普拉诺(Steven D'Aprano)写道: 1)包括[5,6,10]和[5,7,10] 10中的10 ;-) 至于[5,6 .. 10]和[5,7 .. 10] ...首先应该看 像[5 .. 10]我想. 但是你是对的: 似乎有一个问题,在一个情况下包括在一个情况下,并且 其他不是. 我应该考虑一下. 2)我认为没有什么可记住的:数学[1,2 .. 10] 包括10个,几乎每个人都知道 它. 新来者应该记住的是(IMHO)_NOT_SO_OBVIOS_ "范围"的行为. 你 如果您愿意,可能会嘲笑我. 但是看看Cormen的伪代码:"对于 j = 1至n"包括'n'.(和 索引从1开始,不是从0开始,但这是另一个故事). 同样,对于非编程器,包括 边界很明显,没有其他.
# 回答21

" Gregory Petrosyan" 写道: [5,7 .. 10]表示[5,7,9,11,13,15,...]限制为x <= 10,以便 表示[5,7,9]. 10不包括.
# 回答22

" Gregory Petrosyan" 写道: 我认为这必须是无限发电机或一个产生所有的发电机 ASCII字符以" A"开头.
# 回答23

史蒂文·达·阿普拉诺(Steven D'Aprano)写道:不,不,我没有. Sheesh,那只是 *尖叫 *"一个错误!!!". Python故意使用一个简单,一致的索引系统,从一开始到过去的一个末端,以帮助防止路标错误,现在有些人想破坏这一点. *惊奇地摇头* 史蒂文,我从来没有说过Python应该使用此语法,我只是表明 它是如何在Ruby完成的. 这无非是...讨论的基础……而不是"我想要 ! (而你没有做什么?) 好的,您没有注意到这三个时期.
# 回答24

史蒂文·达·阿普拉诺(Steven D'Aprano)写道:不,不,我没有. Sheesh,那只是 *尖叫 *"一个错误!!!". Python故意使用一个简单,一致的索引系统,从一开始到过去的一个末端,以帮助防止路标错误,现在有些人想破坏这一点. *惊奇地摇头* 史蒂文,我从来没有说过Python应该使用此语法,我只是表明 它是如何在Ruby完成的. 这无非是...讨论的基础……而不是"我想要 ! (顺便说一句,您没有什么?)
# 回答25

2006年1月16日星期一,它写了: 当我们在那里时,['aa'..'zyzzogeton'应该是什么? 汤姆 - - 社会主义 - 直接在主线!
# 回答26

2006年1月16日星期一,格雷戈里·彼得罗斯(Gregory Petrosyan)写道: y 是的,我知道这与列表的comp和genexps一致,但是 那也是! 相反,我想在此处查看使用的懒惰列表 - 这些看起来像列表, 可以像列表一样使用,但是如果 我想做的是迭代 他们,他们不需要在记忆中实例化,因此它们是 作为迭代器有效. 两全其美的! 我写了素描 通用懒惰列表:http://urchin.earth.li/~twic/lazy.py 请注意,这就是Xrange已经做到的(正如我刚刚发现的那样). 汤姆 - - 社会主义 - 直接在主线!
# 回答27

在2006年1月16日星期一,亚历克斯·马特利(Alex Martelli)写道:不,不,我没有. Sheesh,那只是 *尖叫 *"一个错误!!!". Python故意使用一个简单,一致的索引系统,从一开始到过去的一个末端,以帮助防止路标错误,现在有些人想破坏这一点. *惊奇地摇头*同意. *如果*我们确实需要偶尔需要一个"最多x*随附*"序列,则应该在无法注意到的语法中,例如范围(x,end endincluded = true). 首先,最后怎么样? 很难错误地做,但在它的中很恐怖 自己的方式. 汤姆 - - 社会主义 - 直接在主线!
# 回答28

汤姆·安德森(Tom Anderson)写道: 有趣的是,但是您如何处理" Unary Postfix"(1 ..) 无限发电机? -1. 就个人而言,我发现指定前两个元素 *绝对 * *revolting *的方法,与开始/步骤/停止样式语法相比,使用始终更尴尬. 来吧,您什么时候知道前两个术语,但不知道步骤大小? 通常您都知道两者,但是显示前两个元素 序列更明显. 我当然喜欢(1,3..9)比(1,9; 2)好 管他呢. y 是的,我知道这与列表comp和genexps是一致的,但也对这些列表一致! 我可以摆脱[],只是拥有发电机或 类似Xrange的类实例. 如果您想将其中之一胁迫 列表,您会说列表((1..5)),而不是[1..5].
# 回答29

Dennis Lee Bieber 写道: 您会在Haskell中写为1:3:[6..19]. 我猜在python 您会说[1,3]+[6..19].
# 回答30

一些想法: 1)令[a,b .. c]为 *普通列表 *! 就像[1,2,3]. 有什么问题为什么包含3 [1,2,3]? IMO考虑[首先,下一个.. 关于列表创建的语法,但不像 "语法到重复范围函数". (而且,因为这是一个普通的 列表,您可以以通常的方式迭代它:"对于 列表做...") 2)[5 .. 0] - > [5,4,3,2,1,0] 因此,如果省略了" next",请让默认步骤为1,如果" first" <" last" 和-1否则.
# 回答31

OP 2006-01-16,Alex Martelli Schreef :哦,来吧,[5,4,.. 0]比范围更容易阅读(5,-1, - - 1). 但是并不比逆转(范围(6))[[句子中的两个表达式中的5个都必须是一个offbyone ;-)]]]]]]] 我们为什么不提供切片更多的功能并使用它们. 这些是我有很多想法. (这些是python3k的想法) 1)制作切片. (不再需要(x)范围) 2)使用底部和停止变量 作为开始的默认值和 停止属性. 最高的值大于 任何其他值,底部的值都小于任何值 其他值. 3)允许在任何地方使用一个值可以使用的切片符号 用过的. 4)在切片上提供许多额外的操作员. __neg__(逆转切片) __和__给出了两个切片的交集 __或__给出了两片的结合 5)为序列提供范围(或切片)方法. 这将提供一个迭代的迭代器 序列的索引. 切片可能是 假如 因为我在Xrange(6)中: 然后会变成 因为我在(0:6)中: 对于反向序列 对于我反向(xrange(6)): 会成为 对于 - (0:6): 对于我,枚举(序列)中的el: 会成为 for sequence.range(): el =序列[i] 但是优势在于,这仍然可以在 有人子类列表,以便启动索引 是另一个数字,但0. 如果您只想要其他所有索引 以下 for sequence.range(:: 2): 这将等同于 for sequence.range()&(:: 2): - - Antoon Pardon
# 回答32

" Gregory Petrosyan" 写道: 那么,您要[A..B]做什么? 动态决定什么方向 去? 啊!
# 回答33

嗯,为什么不呢? 还是您真的讨厌这种行为? 请注意,我在这里发布的所有内容都是我想讨论的一些想法, 讨论后使这些想法更好. 和这个特殊的想法 也需要讨论.
# 回答34

Antoon Pardon写道: 只是在这里检查您的意图. 这些应该做什么? (2:5)#应该给我2、3、4 (2:5:-1)#无限迭代器2、1、0,...? (:5)#从-Infinity开始? 那有什么意思? (:5:-1)#从-infinity开始,然后向后?! 我怀疑您应该提出某种例外 未定义. 史蒂夫
# 回答35

大家好,该提议已经被拒绝(这是PEP 204).
# 回答36

在2006年1月16日星期二,它写了:有趣,但是您如何处理" Unary Postfix"(1 ..)Infinite Generator? 1 .__范围__(无)-1. 就个人而言,我发现指定前两个元素 *绝对 * *revolting *的方法,与开始/步骤/停止样式语法相比,使用始终更尴尬. 来吧,您什么时候知道前两个术语,但不知道步骤大小? 通常您都知道两者,但是显示前两个元素使序列更加明显. 我当然喜欢(1,3..9)比(1,9; 2)或其他任何东西. 我必须承认,我没有漂亮的三词语法 提供您的替代品. 但是恐怕我仍然不喜欢你的. :) uck. 是的,我知道这与列表comp和genexps是一致的,但也对这些列表一致! 我可以摆脱[],只是拥有发电机或类似Xrange的类实例. 如果您想将其中之一胁迫到列表,则说列表((1..5))而不是[1..5]. 听起来不错. 更一般地,我不仅仅是 py摆脱清单 综合,让人们使用列表(GenExp). 那会 显然是PY3K的事情. 汤姆 - - 照顾生意
# 回答37

2006年1月17日,周二,Antoon Pardon写道:为什么我们不提供更大的功能并使用它们. 这些是我有很多想法. (这些是python3k的想法)1)制作切片. (不再需要(x)范围)2)使用底部和停止变量作为开始和停止属性的默认值. 顶部将是一个比任何其他值都要大的值,底部的值将小于任何其他值. 3)允许在任何可以使用值的地方使用切片符号. 4)在切片上提供许多额外的操作员. __neg__(逆转切片)__和__给出了两个切片的交点__ or__给出了两个切片5)提供了范围(或切片)方法的序列. 这将提供一个迭代器,该迭代器会在序列的索引上进行迭代. 可以提供切片 +5 对于i,El中的El(序列):将成为se sequence.range():EL =序列[i] 那个,我不太满意 - 我很喜欢枚举; 它通信 意图很清楚. 我相信枚举是用迭代器实施的, 这意味着它也可能比您的方法更有效. 从那以后 列举对迭代器的作品,您不得不保留它 反正. 尽管如此,两者都是可能的,这是一个品味问题. 但是优点是,当某人子列出列表以使其启动索引是另一个数字,但0时,这仍然可以工作. 可以枚举枚举以在其中做正确的事 情况 - 它可以在枚举上寻找范围方法,如果 找到一个,使用它来生成索引. 像这样: 列举(事物): if(hasattr(thing," rangy")): indices = thing.range() 别的: indices = itertools.count() 返回itertools.izip(索引,事物) 如果您只想要其他所有索引,则可以按序列进行以下操作.range(:: 2):它等于ie sequence.range.range()&(:: 2): 哦,很好. 不过,您也可以枚举枚举以进行范围 作为可选的第二个参数,并使用它. 一个,一半 我想十几个. 汤姆 - - 照顾生意
# 回答38

保罗·鲁宾(Paul Rubin)写道: 我不知道,我在python中看到的大多数句法糖带来 语言的某些东西,或者使结构的产生微不足道 没有它可能很复杂或尴尬的结构,它具有 天然的,蜂蜜的甜味充满风味,它的味道不像某些 癌症的人造甜味剂;-)
# 回答39

格雷戈里·彼得罗斯(Gregory Petrosyan)写道: 不,这是一个明显不同的建议. Antoon提出 *切片 * 文字,而不是 *范围 *文字. 请注意,"范围和 slice语法"是拒绝`pep 204`_的原因之一. 这意味着,如果安东尼真的希望他的提议经历,他 大概 需要确保切片文字明显不同 来自范围文字. ... _pep 204:http://www.python.org/peps/pep-0204.html 史蒂夫
# 回答40

汤姆·安德森(Tom Anderson)写道: ... 我完全同意,但是BDFL已经(我希望)宣布 [...]表格将留在py3k中,作为列表的语法糖(...). 我 发现这是一个真正可恶的前景,但这就是前景:-(. Alex
# 回答41

OP 2006-01-17,Steven Bethard Schreef :: 是的. (2:5:-1)#无限迭代器2、1、0,...? 不,什么都不会有,想想Xrange(2,5,-1) (:5)#从-Infinity开始? 那有什么意思? 我还在想这个. 我现在的想法 这将是无尽的循环返回底部元素. (:5:-1)#从-infinity开始,然后向后?! 这不会给任何东西. 想法是,如果步骤为负 当(隐藏)索引相等或较小时,迭代停止 比停止值. 从一开始就在这里. 我怀疑如果未定义开始,您应该提出某种例外. 这也是一种可能性. - - Antoon Pardon
# 回答42

OP 2006-01-17,Gregory Petrosyan Schreef :: 不,不是. 在我的提议[1,2:8,8]中 [1,切片(2,8),8]. 如果有人想要名单[1,2,3,4,5,6,7,8] 有了这个符号,我会提出一个平坦的功能女巫 也与迭代器一起工作,因此平坦([1,2:8,8])将是 与平面相同([1,范围(2,8),8]) 在我看来,Python已经具有切片文字. 你只有限制 在使用此文字时,订阅中的索引. 我认为这是 一条毫无意义的限制,而字面的切片可能是 将其制成文字和可作为参数可用时非常有用. - - Antoon Pardon
# 回答43

OP 2006-01-18,Tom Anderson Schreef :为什么我们不给切片更多功能并使用它们. 这些是我有很多想法. (这些是python3k的想法)1)制作切片. (不再需要(x)范围)2)使用底部和停止变量作为开始和停止属性的默认值. 顶部将是一个比任何其他值都要大的值,底部的值将小于任何其他值. 3)允许在任何可以使用值的地方使用切片符号. 4)在切片上提供许多额外的操作员. __neg__(逆转切片)__和__给出了两个切片的交点__ or__给出了两个切片5)提供了范围(或切片)方法的序列. 这将提供一个迭代器,该迭代器会在序列的索引上进行迭代. 可以提供一个切片+5,我不太满意 - 我很喜欢枚举; 它非常清楚地传达意图. 我认为枚举是通过迭代器实施的,这意味着它也可能比您的方法更有效. 而且,由于列举了迭代器的作品,因此您必须保留它. 仍然,两个人都 ULD可能是可能的,这是一个品味问题. 在这些情况下,可以补丁枚举以做正确的事情 - 它可以在枚举上寻找一种范围方法,如果找到一个方法,则使用它来生成索引. 像这样:def枚举(thing):if(hasattr(thing,'range')):indices = thite.range()else:indices = itertools.counts.count()return itertools.izip(indices,thing) 我没意见. 我不反对枚举. 哦,很好. 尽管如此,您还是可以将枚举扩展以作为可选的第二参数的范围,并使用它. 我想一个,一个,六个. 是的,您可能会这样做,我不反对,我只是认为 范围将是一个更好的基础,您可以在其上建立枚举和其他 比枚举的事情可以是基础. 例如 __len__可以消除 Len将被定义为: Def Len(SEQ): rng = seq.range() 返回rng.stop -rng.start
# 回答44

OP 2006-01-16,Gregory Petrosyan Schreef :: 滥用语言,人们已经可以做很多事情 现在在Python2.4中. 导入系统 从类型导入切片 VSLICE类(对象): def __init __(自我,有趣): self.fun =有趣 def __getItem __(self,inx): 如果不是Isinstance(INX,元组): inx = inx, 返回self.fun(*inx) @vslice def rnglst(*arg): lst = [] 对于El在Arg中: 如果类型(EL)是切片: start = el.start或0 stop = el.stop或sys.maxint 步骤= El.Step或1 如果步骤> 0: 开始<停止: lst.append(开始) 开始 +=步骤 别的: 开始>停止: lst.append(开始) 开始 +=步骤 别的: lst.append(el) 返回LST rnglst [3,4,5] - > [3,4,5] rnglst [1,2:8] - > [1,2,3,4,5,6,7] rnglst [3:9:2,21:6:-3] - > [3,5,7,7,21,18,15,12,9] - - Antoon Pardon
# 回答45

亚历克斯·马特利(Alex Martelli)写道: 您有链接吗? 我还没有看到这一声明,http://wiki.python.org/moin/python3%2e0仍然列出了这是一个开放的问题. 我发现这是一个真正可恶的前景 我不确定我是否会觉得它确实可恶,但绝对是不必要的. Toowtdi和所有... 史蒂夫
# 回答46

Steven Bethard 写道:我不确定我是否会觉得这是可恶的,但绝对是不必要的. Toowtdi和所有... 好吧,[...]常规列表的符号(而不是列表 综合也是不必要的,因为我们可以使用"列表((a,b,c))". 在语法极简主义之后,我们是真实的吗? 如果我们是,我们不应该 只是全部切换到使用方案吗?
# 回答47

保罗·鲁宾(Paul Rubin ... 不,我们不追求语法极简主义(这可能证明搬到 LISP或方案),但语法简单而可读. 我看到不 {a:b,c:d}字典的简单简单且可读性的替代方案 例如,显示语法; dict((((a,b),(c,d)))只是不会切割它, 由于"括号过载"(双重意图). 但 列表没有这样的问题,而且实际上没有更清晰的附加值 和[a,b,c]与列表中的可读性(a,b,c ). 而且不要告诉我 附加的值是括号"建议列表",因为它们习惯了 索引元素和命令也;-). 所以他们可能的唯一原因 "建议列表"是您习惯了Python中的显示表格,但是 恕我直言,没有真正的理由为列表提供显示表格. Alex
# 回答48

亚历克斯·马特利(Alex Martelli)写道: [snip] ...还是应该是列表(剪)? 但是列表没有这样的问题,并且在[a,b,c] vs列表(a,b,c)中确实没有附加的清晰度和可读性值. 而且不要告诉我附加的值是括号"建议列表",因为它们也用于索引元素和命令;-). 因此,他们可能"建议列表"的唯一原因是您习惯了Python中的显示表格,但是没有真正的理由可以为列表提供显示表单,iMho. 亚历克斯 我正在读这篇文章,并以为"我不同意亚历克斯·马特利(Alex Martelli); [a,b,c]比列表(a,b,c)" ..."更容易阅读和理解. 然后它使我意识到,我第一次了解清单 理解(一年多以前,在A.M.的Python中 简而言之),我习惯于立即看到各种麻烦 方括号表明创建了列表. 当时,我会完全同意该列表(a,b,c) *很多 * 更清楚... {或像a = list的表达式(x for x in range(1))...} *现在*,我更喜欢[],因为我已经受过"训练"的方式...但是,思考 回来,考虑教学python,我必须同意亚历克斯的观点 要点(并不是说任何人都会关心 *我的 *意见;-) 安德烈
# 回答49

史蒂文·贝萨德(Steven Bethard)写道: Toowtdi认为有害. "只有一种方法可以做到 它"和"有一种明显的方法".第一个 是贬义的,有害的,如果是真的,但愚蠢 这从来都不是真的. 永远不仅有一种方法 除了最琐碎的事情外,其他任何东西. 也许有 只有一种方法可以进行零操作,(通过),仅此而已. 即使人们意味着一个明显的,不仅是一个 仍然有害,因为重点是错误的. 这 重点是语言的 *限制性 * 这仅仅给出了一种明显的做事方式. Python禅宗的座右铭更加细微差别 明智,尽管不是那么活泼: "应该有一个 - 最好只有一个 - 很明显地做到这一点." 禅的重点是 *使 * python 至少有一个(最好只有一个)明显 做事的方式. 禅是要确保 解决方案在Python中很明显. Toowtdi是关于 语言中的解决方案的匮乏,我畏缩了 每次我看到它. 看到不同? - - 史蒂文.

标签: python

添加新评论