首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Haskell有列表切片(比如Python)吗?

Haskell有列表切片(比如Python)吗?
EN

Stack Overflow用户
提问于 2011-01-05 03:59:07
回答 8查看 24.9K关注 0票数 49

Haskell的语法糖与Python List Slices相似吗?

例如,在Python中:

x = ['a','b','c','d']
x[1:3] 

提供从索引1到索引2包含的字符(或不包括索引3的字符):

['b','c']

我知道Haskell有针对特定索引的(!!)函数,但是有没有等效的“切片”或列表范围函数?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-01-05 04:06:50

虽然没有对列表进行分片的内置函数,但您可以使用droptake轻松地自己编写一个

slice :: Int -> Int -> [a] -> [a]
slice from to xs = take (to - from + 1) (drop from xs)

应该指出的是,由于Haskell列表是单链表(而python列表是数组),这样创建的子列表将是O(to),而不是像python中的O(to - from) (当然,假设整个列表实际上都得到了评估-否则Haskell的惰性会生效)。

票数 61
EN

Stack Overflow用户

发布于 2011-01-05 04:47:07

如果您正在尝试匹配Python“列表”(正如其他人所指出的,这不是一个列表),那么您可能希望使用具有内置slice的Haskell vector包。另外,Vector可以是evaluated in parallel,我认为这很酷。

票数 36
EN

Stack Overflow用户

发布于 2011-01-05 04:04:44

没有语法糖。在需要的情况下,您可以只使用takedrop

take 2 $ drop 1 $ "abcd" -- gives "bc"
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4597820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档