Python学习——例题详解2、去除列表中的重复项

1、例题

       定义一个函数,去除列表中的重复项同时保持原来列表中的顺序。

def unique(items): #定义函数unique
    items_existed = set() #空的集合用于保存结果
    for item in items:
       if item not in items_existed:
        yield item #yield关键词生成当前结果并继续迭代不返回
        items_existed.add(item) #结果是一个生成器对象
#示例代码
if __name__=="__main__":
     a=[1,2,3,4,2,3,4,5,6,7]
     a1=unique(a) #调用了上述
     print(list(a1))
2、详解

 (1)生成器

        生成器(Generator)是一种特殊的迭代器,可以在需要时生成值,而不需要一次性将所有值存储在内存中。使用yield语句来产生值,并在每次生成值后暂停执行,保留当前状态以便下次调用时继续执行。可以通过生成器表达式或定义函数并使用yield语句来建立一个生成器。

       生成器表达式类似于列表的推导式,但列表使用的是方括号,生成器表达式使用圆括号。

a = [x*3 for x in range(4)] #定义a为列表
print(a) #输出结果:[0, 3, 6, 9]
a=(x*3 for x in range(4))  #此时a为生成器对象
print(a)  #结果报错:<generator object <genexpr> at 0x000001AA53581A40> 
print(list(a))  #[0, 3, 6, 9]

(2)for item in items

        item和items不是特定的数据类型,而是代码使用过程中的变量名称。如果items是列表的话那么就遍历列表的每个元素,items是字符串的话就遍历每个字符。

        Python会遍历items中的每个元素,并将当前元素赋值给item,然后执行循环体中的代码。这种语法通常用于遍历集合中的元素或处理可迭代对象中的每个元素。

最后再给出一个使用生成器来构造斐波那契数列(Fibonacci)的前n个值的例子:

def fibonacci_generator(n):
    a, b = 0, 1
    for _ in range(n): #_是临时变量
        yield a
        a, b = b, a + b

# 使用生成器函数生成前10个斐波那契数
fib_gen = fibonacci_generator(10)
for i in fib_gen:
    print(i)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值