yield列表反转 islice切片(2.6)

yield列表反转 islice切片

列表反转

l1 = [i for i in range(10)]
print(l1)
print(l1[::2])
l1.reverse()
# 注: python2里列表reverse是返回一个新的列表
print(l1)
print(l1[::-1])
for x in reversed(l1):
    print(x)

output:

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

实际上,for循环要求l1有这个函数, __iter__ 反向循环reveresd要求l1有__reveresd__

l1.__iter__()
l1.__reversed__()

自己实现一个可以反转的列表

class FloatRange:
    def __init__(self, start, end, step):
        self.start = start
        self.end = end
        self.step = step

    def __iter__(self):
        res = self.start
        while res <= self.end:
            yield res
            res += self.step

    def __reversed__(self):
        res = self.end
        while res >= self.start:
            yield res
            res -= self.step

for i in FloatRange(1, 10, 0.5):
    print(i)
print(‘#============‘)
for i in reversed(FloatRange(1, 10, 0.5)):
    print(i)

本文和前文有很多yiled的例子,也讲了读文件的分片,介绍一个可以分片的函数 itertools.islice

islice(iter, start=0, end, step=1)

# 运行这个代码可以看到with 0和1输出相同
# f 0 1输出不同,是因为islice会消耗iter
from itertools import islice
print("#======with 0======\n\n")
with open(‘2.5生成器.md‘, ‘r‘) as f:
    for i in islice(f, 100, 110):
        print(i)
print("#======with 1======\n\n")
with open(‘2.5生成器.md‘, ‘r‘) as f:
    for i in islice(f, 100, 110):
        print(i)

print("#======f 0======\n\n")
# 对同一个f进行操作
f = open(‘2.5生成器.md‘, ‘r‘)
for i in islice(f, 0, 10):
    print(i)
print("#======f 1======\n\n")
for i in islice(f, 0, 10):
    print(i)

简单的例子展示islice消耗iter

l = range(10)
l = iter(l)
for i in islice(l, 0, 5, 2):
    print(i)

print(‘一直输出到结束‘)
for i in islice(l, 0, None):
    print(i)

output:

0
2
4
一直输出到结束
5
6
7
8
9

原文地址:https://www.cnblogs.com/wangjiale1024/p/10349351.html

时间: 2024-11-06 15:38:53

yield列表反转 islice切片(2.6)的相关文章

【案例】Python之列表反转

1.列表反转 列表反转是初学时比较常见的问题,这里总结了三种列表反转的方式 1.1>内建函数sorted() # 列表反转 list_num = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(sorted(list_num, reverse=True)) sorted()反转列表只对顺序排列的列表有效果 1.2>内建函数reversed() # 列表反转 list_num = [1, 2, 3, 4, 5, 6, 7, 8, 9] # reversed()返回的是一个迭代

列表的初识,列表的索引切片,列表的增删改查,列表的嵌套,元组的初识,range

1 内容总览 列表的初识 列表的索引切片 列表的增删改查 列表的嵌套 元组的初识(了解) 元组的简单应用(了解) range 2 具体内容 列表的初识 why: str: 存储少量的数据.切片出来全都是str类型,存储的数据单一. list:能储存大量的数据.包含不同类型的数据.且有顺序,有规律,可自己制作设计其中的数据,可修改 what:list l1 = [100, 'alex',True,[1, 2, 3]] 可承载任意数据类型,存储大量的数据. python常用的容器型数据类型. 列表是

列表反转函数

列表反转函数一: #!/user/bin/python # -*- coding: UTF-8 -*- def reverse(li): for i in range(0, len(li)/2): temp = li[i] li[i] = li[-i-1] li[-i-1] = temp l = [1, 2, 3, 4, 5] reverse(l) print(l) 列表反转函数二: def reverse(ListInput): RevList=[] for i in range (len(L

四种Python 列表反转显示方法

第一种,使用reversed 函数,reversed返回的结果是一个反转的迭代器,我们需要对其进行 list 转换 listNode = [1,2,3,4,5] newList = list(reversed(listNode)) print(newList) #结果 [5,4,3,2,1] 第二种,使用sorted函数,sorted是排序函数,它是对一个列表进行排序后生成一个新的list列表,而sort则是在原来的列表上直接进行排序. listNode = [1,2,3,4,5] newLis

列表的使用2,深COPY和浅COPY,循环列表,步长切片

name2=names.copy() 下面我看几种奇怪的现象: 首先把源列表copy以后,把源列表第2个数值修改.那么没毛病. 如果源列表里,还包含了一个子列表:这也没毛病 如果我们这个时候修改子列表的数值.我们来看一个神奇的现象: copy是一种浅COPY,它只会COPY第一层的数据,而不会深入COPY.只会COPY子列表的内存指针,内存地址. 如果你不用COPY的方法,那问题会更严重: 结果是这样的,连浅COPY都不如:相当于只把列表的内存地址复制了一下: 简单来说就是这种情况. 但是如果是

【三】Python List列表,及切片

H='abcdefghijklmnopqrstuvwxyz' n=0for x in list(H):      n=n+1    if n%2 == 0:        print ",",    else:        print x,   print n=0while n<len(H):    if n%2==1:       H = H.replace( H[n:n+1],',')    n=n+1print H n=0for x in list(H):      n=

Python&amp;int&amp;method&amp;String切片、索引,列表、元祖、字典

一.int的两个方法 a. __add__() bit_length() number_one = 7number_two = 5print(number_one + number_two)print(number_one.__add__(number_two))print(number_one.bit_length())print(number_two.bit_length()) 效果: 121233 二.String索引和切片 name = 'Jane'print(name[0])print

python学习之列表、切片、元祖

列表也可以叫做(list.数组.arrary) name = ['张三','李四','小萌','李丽','悟空'] # 0 1 2 3 4 下标.(角标,索引) print(name[1]) print(name[-1]) #最前面一个元素下标是0,最后一个元素下标是-1 对列表进行增删改查 增 append. insert citys = [] citys.append('北京') #在列表末尾加增加一个元素 citys.insert(0,'上海') #在指定的位置增加一个元素 citys.a

python切片:使用列表的一部分

学习如何处理列表的所有元素.处理列表的部分元素——Python称之为切片. 切片 要创建切片,可指定要使用的第一个元素和最后一个元素的索引. 与函数range()一样,Python在到达指定的第二个索引前面的元素后停止. 要输出列表中的前三个元素,需要指定索引0~3,这将输出分别为0.1和2的元素. 下面的示例处理的是一个运动队成员列表: players = ['charles', 'martina', 'michael', 'florence', 'eli'] print(players[0: