Python内置函数--reversed()

它将一个序列作为输入,并返回另一个序列,其中元素的顺序与给定输入序列的顺序相反。它不会对原始序列产生任何影响。也就是在原列表的基础上返回一个新的反向列表。

粗略的看看

class reversed(Iterator[_T], Generic[_T]):
    @overload
    def __init__(self, __sequence: Reversible[_T]) -> None: ...
    @overload
    def __init__(self, __sequence: SupportsLenAndGetItem[_T]) -> None: ...
    def __iter__(self) -> Iterator[_T]: ...
    def __next__(self) -> _T: ...

__iter__与__next__之前说过,此处就不再多说明了,不知道的可以看看前面的文章。

小例子1–列表

list1=['a','b','c','d']

list2 = list(reversed(list1))
print(list2,id(list2))
print(list1,id(list1))
"""
['d', 'c', 'b', 'a'] 2282882887040
['a', 'b', 'c', 'd'] 2282887136832
"""

返回的list2是一个新列表。在上述中不用list用.next()取值也行,也是可以取出值的。原因就不在多说明了。

reversed在自动化中,运用的不是特别的多,但是需要了解,以备不时之需。

小例子2–字典

dic = {"name1":"清安","name2":"拾贰"}

list2 = reversed(dic)
print(list(list2))
"""
['name2', 'name1']
"""

字典也是可以的,其他的数据结构也是OK的,包括元组。学会举一反三,多多思考。

### 回答1: Python中的内置函数reversed用于反转一个序列(如列表、元组、字符串等),返回一个反转后的迭代器对象。下面是一个简单的Python模拟内置函数reversed的实现: ```python def my_reversed(seq): if isinstance(seq, str): return seq[::-1] elif isinstance(seq, (list, tuple)): return seq[::-1].__iter__() else: raise TypeError("argument must be a sequence") ``` 这个函数接受一个序列作为参数,如果是字符串则直接返回反转后的字符串,如果是列表或元组则返回一个反转后的迭代器对象。如果参数不是序列类型则抛出TypeError异常。 ### 回答2: 题目要求我们用Python模拟内置函数reversed,那么我们先来了解一下reversed的功能。 reversed可以用于反向遍历一个序列类型(列表、元组、字符串等),返回一个新的可迭代对象,其内部元素为原对象的元素,但是顺序与原对象相反。 下面是一个使用reversed的例子: ```python lst = [1, 2, 3, 4, 5] for i in reversed(lst): print(i, end=' ') ``` 输出结果为:5 4 3 2 1 现在我们就来按照题目要求模拟这个函数。 第一步,我们需要实现一个函数,接受一个序列类型(列表、元组、字符串等),返回一个新的可迭代对象,其内部元素为原对象的元素,但是顺序与原对象相反。 ```python def my_reversed(seq): return seq[::-1] ``` 上面的代码使用了切片,把整个序列反向。 接下来,我们可以进行测试: ```python lst = [1, 2, 3, 4, 5] for i in my_reversed(lst): print(i, end=' ') ``` 输出结果与上面使用reversed的例子一致:5 4 3 2 1 但是,这个函数并不能完全模拟reversed,因为它返回的是一个新的对象(列表或字符串),而不是一个可迭代对象。如果要返回一个可迭代对象,需要使用生成器。 ```python def my_reversed(seq): for i in range(len(seq) - 1, -1, -1): yield seq[i] ``` 上面的代码使用了生成器,每次yield返回一个元素,直到最后一个元素。 例如,下面的代码使用了生成器表达式: ```python lst = [1, 2, 3, 4, 5] gen = (i for i in my_reversed(lst)) for i in gen: print(i, end=' ') ``` 输出结果与前面的例子一致:5 4 3 2 1 由此可见,Python中的生成器是非常强大的一种工具,可以模拟很多内置函数的功能。 ### 回答3: 在Python中,内置函数reversed()用于将定义的序列进行翻转。如果需要在自己的代码中模拟reversed(),也可以通过编写代码实现这个功能。 首先,需要定义一个函数,它将接收一个序列参数,并返回该序列的反向序列。具体实现方法是,定义一个空列表res,然后使用for循环将原序列中的每一个元素逐个插入到res列表的开头位置,即可完成序列的反向操作。实现代码如下: ``` python def my_reversed(sequence): res = [] for i in sequence: res.insert(0, i) return res ``` 测试代码如下: ``` python test = [1, 3, 5, 2, 4, 6] print(list(reversed(test))) print(my_reversed(test)) ``` 输出结果为: ``` [6, 4, 2, 5, 3, 1] [6, 4, 2, 5, 3, 1] ``` 可以看到,使用自己编写函数my_reversed()所得到的结果与使用内置函数reversed()的结果是一致的,均是将序列元素反向排列的结果。 值得注意的是,如果要在实际开发中使用自定义的功能函数,通常需要更完善的代码,包括参数类型检查以及异常处理等。此外,此方法并不适合用于大规模数据的序列反转,因为使用insert()方法将元素插入到列表开头位置的时间复杂度为O(n),因此反转较大的序列可能会占用大量的计算资源。对于此类情况,更好的做法是直接使用内置函数reversed()或者通过其他方法实现更高效的序列反转。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清安无别事

慢慢的积累一杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值