精华内容
下载资源
问答
  • python islice()的使用

    千次阅读 2021-01-28 19:51:23
    如果行数为第一行,则跳过当前循环,这样是可以实现的,但是效率较低,因此经过某度,发现了islice()函数(后续文章会介绍如何跳过第一行读取表格文件,本文只介绍islice()方法使用)提示:以下是本篇文章正文内容...

    前言

    读取Excel表格时,如何跳过第一行读取表格数据呢?第一想法是在循环读取时进行判断,如果行数为第一行,则跳过当前循环,这样是可以实现的,但是效率较低,因此经过某度,发现了islice()函数(后续文章中会介绍如何跳过第一行读取表格文件,本文只介绍islice()方法的使用)

    提示:以下是本篇文章正文内容,下面案例可供参考

    一、islice()?

    迭代器切片

    二、islice()使用步骤

    1.导包

    使用islice()函数需要先导入islice包

    from itertools import islice

    2.构造迭代器对象

    这里我们将一个列表加工成迭代器对象

    代码如下(示例):

    my_list = [0,1,2,3,4,5,6,7,8,9]

    iter_my = iter(my_list)

    3.islice()方法

    这里截取一部分源码来分析:

    代码如下(示例):

    class islice(object):

    """

    # islice(iterable, stop) --> islice object

    islice(iterable, start, stop[, step]) --> islice object

    ......

    """

    从源码中可以发现方法 islice(iterable, start, stop[, step]) --> islice object 包含四个参数,其中iterable为迭代器(即第2步中构造的迭代器对象),start, stop分别表示切片的起止位置,step表示步长,此函数返回的是一个切片对象

    三、islice()方法举例

    代码如下(示例):

    from itertools import islice

    # help(islice)

    # 构造迭代器

    my_list = [0,1,2,3,4,5,6,7,8,9]

    iter_my = iter(my_list)

    for i in islice(iter_my,0,None,2):# 表示从第一个元素开始,到最后一个元素,以步长2进行切片输出

    print(i)

    结果展示:

    0

    2

    4

    6

    8

    进程已结束,退出代码 0

    总结

    小白一枚,如有错误,还请指出,谢谢~

    另外,对迭代器与迭代器切片不够清楚的,可以参考博主“海上二手挖掘机”的文章,我觉得写得非常好

    https://blog.csdn.net/qq_27342265/article/details/105500204?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-3.control

    展开全文
  • 对于列表,可以使用切片my_list [-10:]来获取最后(最多)10个元素我想用itertools.islice做同样的事情.在这种情况下,我有一个collections.deque.有没有比以下更有效的方法呢?from collections import dequeimport ...

    对于列表,可以使用切片my_list [-10:]来获取最后(最多)10个元素

    我想用itertools.islice做同样的事情.在这种情况下,我有一个collections.deque.

    有没有比以下更有效的方法呢?

    from collections import deque

    import itertools

    my_deque = deque()

    my_list = list()

    for i in range(100):

    my_deque.append(i)

    my_list.append(i)

    然后我们做切片:

    start = max(0, len(my_deque) - 10)

    for i in list(itertools.islice(my_deque, start, None)):

    pass

    我的时间:

    deque:1000000个循环,最好是每个循环3:962 ns

    list slicing:10000000个循环,最佳3:95.9 ns每个循环

    最佳答案 当你发现没有办法切割collections.deque.但它支持在这种情况下可以使用的旋转:

    last_n = 10

    my_deque.rotate(last_n)

    for i in itertools.islice(my_deque, last_n):

    pass

    在这种情况下,itertools.islice的问题是它需要迭代所有元素,直到它到达停止.这是因为它通常不仅需要使用像列表和deques这样的随机访问容器来使用迭代器.所以在你的情况下,islice真的必须遍历deque中的所有元素.使用旋转然后islice它只需迭代10个元素.

    至于时间,很难知道你比较了什么,但使用这个设置:

    from collections import deque

    import itertools

    my_deque = deque(range(10000))

    my_list = list(range(10000))

    我得到以下时间:

    %%timeit

    my_deque.rotate(10)

    for i in itertools.islice(my_deque, 10):

    pass

    my_deque.rotate(-10) # so the next timing operates on the orginal deque again

    2.76 µs ± 41.6 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

    %%timeit

    start = max(0, len(my_deque) - 10)

    for i in itertools.islice(my_deque, start, None):

    pass

    136 µs ± 8.08 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

    %%timeit

    start = max(0, len(my_list) - 10)

    for i in itertools.islice(my_list, start, None):

    pass

    119 µs ± 1.64 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

    %timeit my_list[-10:]

    434 ns ± 12.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

    所以它不能击败列表切片(仍然慢〜5倍),但它肯定比使用你的islice方法快得多(~50倍).

    展开全文
  • 迭代器切片 问题 你想得到一个由迭代器生成的...函数itertools.islice()正好适用于在迭代器和生成器上做切片操作。比如: >>> def count(n): ... while True: ... yield n ... n += 1 ... >>>...

    迭代器切片

    问题

    你想得到一个由迭代器生成的切片对象,但是标准切片操作并不能做到。

    解决方案

    函数 itertools.islice() 正好适用于在迭代器和生成器上做切片操作。比如:

    >>> def count(n):
    ...     while True:
    ...         yield n
    ...         n += 1
    ...
    >>> c = count(0)
    >>> c[10:20]
    Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
    TypeError: 'generator' object is not subscriptable
    
    >>> # Now using islice()
    >>> import itertools
    >>> for x in itertools.islice(c, 10, 20):
    ...     print(x)
    ...
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    >>>

    讨论

    迭代器和生成器不能使用标准的切片操作,因为它们的长度事先我们并不知道(并且也没有实现索引)。 函数 islice() 返回一个可以生成指定元素的迭代器,它通过遍历并丢弃直到切片开始索引位置的所有元素。 然后才开始一个个的返回元素,并直到切片结束索引位置。

    这里要着重强调的一点是 islice() 会消耗掉传入的迭代器中的数据。 必须考虑到迭代器是不可逆的这个事实。 所以如果你需要之后再次访问这个迭代器的话,那你就得先将它里面的数据放入一个列表中。

    展开全文
  • 作为一个研究案例,我有一部由三个主要人物组成的文学小说,他们每个...我想数一数所有章节关于字符X,字符Y和字符Z的字数这是我目前正在处理的关于一个特定字符(亚伦)章节的Python代码:from itertools import is...

    作为一个研究案例,我有一部由三个主要人物组成的文学小说,他们每个人都有自己的章节。也就是说:第一章是角色X(亚伦),第二章是角色Y(西格里厄斯),第三章是角色Z(乔尼),第四章是角色X,第五章是角色Y,第六章是角色Z,依此类推。。。我想数一数所有章节中关于字符X,字符Y和字符Z的字数

    这是我目前正在处理的关于一个特定字符(亚伦)章节的Python代码:from itertools import islice

    with open(textfile, 'rt', encoding='utf-8') as f:

    # Computes the total word count of the file

    text = f.read()

    words = text.split()

    wordCount = len(words)

    print ("The total word count is:", wordCount)

    # Aaron's chapters

    chapterAaron1 = islice(f, 0, 123)

    chapterAaron4 = islice(f, 223 ,326)

    chapterAaron6 = islice(f, 639, 772)

    chapterAaron10 = islice(f, 1125, 1249)

    chapterAaron12 = islice(f, 1370, 1455)

    chapterAaron15 = islice(f, 1657, 1717)

    chapterAaron19 = islice(f, 2088, 2138)

    chaptersAaron = (chapterAaron1, chapterAaron4, chapterAaron6, chapterAaron10, chapterAaron12, chapterAaron12, chapterAaron15, chapterAaron19)

    # Computes the total word count of Aaron's chapters (does not work)

    wordsAaron = chaptersAaron.split()

    wordCountAaron = len(wordsAaron)

    print ("The total word count of Aaron's chapters is:", wordCountAaron)

    我已经手动决定了不同章节(每个字符)在txt文件的哪一行开始和结束。我使用islice将txt文件拆分为特定的章节(包含在特定的行号之间),以便计算这些行号(即章节)之间包含的字数。然而,我似乎找不到一种方法来以正确的方式实现islice的目的。我得到这个AttributeError:“tuple”对象没有属性“split”。我想要的是将一个特定字符的所有章节存储在一个变量中(例如chaptersAaron),这样我就可以用它来做一些事情,例如计算单词的总数并搜索其中特定单词的出现情况。在有人对我正确使用islice有什么建议吗?也很欢迎将文本拆分成章节。在

    展开全文
  • python文件操作细节

    2020-12-12 22:10:45
    python文件读写示例with open(file_w_path, 'r') as f_r:with open(file_r_path, 'w') as f_w:for line in f_r.readlines():f_w.write(line + '\n')覆盖和追加细节r:只读方式打开文件,缺省默认。r+:读写方式打开...
  • 今天了解了下python中内置模块itertools的使用,熟悉下,看能不能以后少写几个for,嘿嘿????。1.无穷的迭代器1.1 count(start,[step])count()接受两个参数start:循环开始的数字step:循环的间隔from itertools ...
  • 通过调用循环器的next()方法 (next()方法,在Python 3.x),循环器将依次返回一个对象。直到所有的对象遍历穷尽,循环器将举出StopIteration错误。在for i in iterator结构,循环器每次返回的对象将赋予给i,直到...
  • Python中itertools模块用法详解

    千次阅读 2018-12-01 11:23:54
    这篇文章主要介绍了Python中itertools模块用法,详细的讲述了itertools模块常见函数的用法及相关示例,有助于深入掌握Python程序设计,需要的朋友可以参考下 本文实例讲述了Python中itertools模块用法,分享给大家...
  • python题目

    2020-11-29 21:11:47
    1、python的函数参数传递#-*- coding:utf-8 -*-"""两个函数表现不同的原因是:1、所有的变量都可以理解为对内存对象的“引用”,而类型是属于对象的,而不是变量的;2、在是否可以修改的问题上,分为两种对象,一种...
  • python itertools 用法

    2021-01-13 15:50:29
    itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存。 使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环。 无限迭代器 itertools包自带了三个可以无限迭代的迭代器。这意味着,当...
  • from itertools import islice def checker(nums): return all(i , j in zip(nums, islice(nums, 1, None))) Another iterator-friendly option is to use the itertools pairwise recipe, also available via 3rd ...
  • Python进阶笔记列表生成式函数的参数类型lambda函数map, reduce, filter, sorted函数eval, exec, join, zip函数itertools的函数copy与deepcopy函数模块os、sys模块迭代器生成器迭代器参考网站:Python3教程: ...
  • 精密解析Python切片用法

    千次阅读 2019-01-04 11:30:17
    众所周知,我们可以通过索引值(或称下标)来查找序列类型(如字符串、列表、元组…)的单个元素,那么,如果要获取一个索引区间的元素...在使用切片的过程,有什么要点值得重视,又有什么底层原理值得关注呢?...
  • 本文介绍了itertools的使用方式,其中很多的方法十分实用,再不用写出很多个for循环来完成一些简单的工作了,此外其中的各种组合使用方式也很实用,快学起来吧!
  • python高级用法使用手册(收藏)

    千次阅读 2020-01-22 15:01:03
    一、稀有用法 1、bfs:set代替list效率高 2、set转成tuple可以序列化 3、set.intersection(set1, set2 ... etc) https://www.runoob.com/python3/ref-set-intersection.html 4、python的排序模块bisect ...
  • python中跳过

    2020-11-20 22:56:45
    广告关闭腾讯云11.11云上盛惠 ,精选热门产品...我有一个循环在运行,但是有可能在循环引发异常。 为了防止这种情况,我捕获异常并处理它们。 但是,即使出现异常,其余的迭代也会运行。 在我的except:clause to...
  • Python中zip()函数用法

    2020-11-26 02:46:45
    定义:zip([iterable, …])zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则...
  • python中的高效迭代器函数

    万次阅读 2017-01-21 12:21:32
    python中内置的库有个itertools,可以满足我们在编程绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~首先还是要先import一下:#import itertools ...
  • python中slice 和 indices使用

    万次阅读 2019-09-05 19:54:36
    一般来说,内置的slice()函数会创建一个切片...# slice 两种用法 classslice(stop) classslice(start,stop[,step]) 返回一个表示由range(start,stop,step)所指定索引集的slice对象。 其中start和step参数默认为...
  • 迭代器的特点是:惰性求值...Python 内置的 itertools 模块包含了一系列用来产生不同类型迭代器的函数或类,这些函数的返回都是一个迭代器,我们可以通过 for 循环来遍历取值,也可以使用 next() 来取值。itertools...
  • python + selenium 模块封装及参数化

    千次阅读 2018-05-13 22:15:29
    注:项目并不推荐使用for循环来进行参数化,因为我们不方便进行用例条目统计,及错误定位,(如我们上面的代码使用unittest 写在test函数不管我们让其搜索了多少个值,它都只会计数为1,而且如果出错他只会显示这...
  • Python中使用迭代器

    2020-12-05 16:19:43
    本文介绍将代码转换为使用迭代器的原因和实用技巧。我最喜欢的Python语言的特色之一是生成器,它们是非常有用的,然而当阅读开源代码时,我很少遇到它们。在这篇文章,我希望...为什么使用迭代器是一个好的方法?...
  • 三、无限迭代器 有三个无限迭代器,当你使用它们的时候,你要知道何时去跳出这个循环,不然你将陷入无限循环之,在生产数字或者遍历事先不知道长度的数据时非常有用。迭代器实参结果示例 count()start, [step]...
  • 这种思想的“苗头”早已出现在较老的函数 xrange() 以及文件方法 .xreadlines() 了。通过引入 yield 关键字,Python 2.2 在内部实现的许多方面推广了这一概念,并使编程定制迭代器变得更为简单( yield 的出现使...
  • python中的generator保存的是算法,真正需要计算出值的时候才会去往下计算出值。它是一种惰性计算(lazy evaluation)。 要创建一个generator有两种方式。 第一种方法:把一个列表生成式的[]改成(),就创建了一个...
  • 关于迭代器和生成器的区别:在Python社区,大多数时候把迭代器和生成器视为同一概念。如果需要细分的话,那么迭代器用于从集合取出数据,而生成器用于凭空生成元素。一、序列所有序列都是可以迭代的。我们接下来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,537
精华内容 614
热门标签
关键字:

python中islice的用法

python 订阅