首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python-VBA函数之旅-reversed函数

  • 25-03-03 04:23
  • 3947
  • 6565
blog.csdn.net

目录

一、reversed函数的常见应用场景

二、reversed函数使用注意事项

三、如何用好reversed函数?

1、reversed函数:

1-1、Python:

1-2、VBA:

2、推荐阅读:

个人主页: https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421

一、reversed函数的常见应用场景

        reversed函数在Python中有多种实际应用场景,它使得在处理序列时能够灵活地反向迭代元素,常见的应用场景有:

1、序列反转:当你需要反向打印一个列表、元组或字符串中的元素时,可以使用reversed()函数配合循环或字符串的join()方法。

2、与生成器表达式结合: 你可以将reversed()函数与生成器表达式结合使用,以在迭代过程中实时反转序列的一部分。

3、图形和图像处理:在图形和图像处理中,reversed()函数可以用于处理像素数组或其他数据结构,以实现各种翻转或镜像效果。

4、与集合操作结合:尽管集合本身是无序的,但你可以先将集合转换为列表,然后反转列表,这在处理某些需要特定顺序的集合操作时可能很有用。

5、算法和数学问题:在解决某些算法和数学问题时,可能需要从后向前遍历序列。例如,在寻找子序列或进行某些类型的数学计算时,可能需要从序列的末尾开始。

6、与内置函数结合:reversed()函数可以与map(), filter(), zip()等内置函数结合使用,以在迭代过程中反转结果。

7、文件路径处理:在处理文件路径时,有时你可能需要反转路径中的部分组件,虽然这不是reversed()函数的直接应用,但你可以使用它来反转路径组件列表,然后重新组合它们。

8、处理栈或队列数据结构:在计算机科学中,栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。虽然Python没有内建的栈类型,但列表可以模拟栈的行为(使用append()添加元素到末尾,pop()从末尾删除元素),reversed()函数可以与列表结合使用,以从后向前遍历元素,这在模拟栈的某些操作时可能很有用。

9、与切片结合:虽然切片也可以用来获取序列的反向副本(如lst[::-1]),但在某些情况下,使用reversed()函数可能更加直观或灵活,尤其是当你只需要迭代而不需要实际的反向副本时。

10、与文件操作结合:在处理文件时,你可以使用reversed()函数来反转文件中的行或其他数据块,但这通常需要先将文件内容读入一个列表或类似的数据结构中。

        总之,reversed()函数提供了在Python中处理序列时反向迭代元素的灵活方式,并且可以在多种实际应用场景中使用。

二、reversed函数使用注意事项

        在Python中,reversed()函数是一个内置函数,它返回一个反转的迭代器,这意味着你可以遍历序列(如列表、元组或字符串)的元素,但顺序是相反的,使用reversed()函数时需要注意以下事项:

1、不会修改原始数据:reversed()函数返回的是一个迭代器,它只是提供了一个反向遍历原始数据的方式,并不会修改原始数据。
2、迭代器只能遍历一次:一旦你开始遍历reversed()返回的迭代器,你就不能再次从头开始遍历,因为迭代器是一种消耗型的数据结构,元素在被访问后就会从迭代器中“消失”。
3、适用于序列类型:reversed()函数主要用于序列类型(如列表、元组、字符串等),对于非序列类型(如集合、字典等),reversed()函数可能无法正常工作或产生不可预测的结果。
4、内存使用:虽然reversed()函数本身不会显著增加内存使用(因为它只返回一个迭代器),但如果你将迭代器转换为列表(例如,使用list(reversed(some_list))),那么将会创建一个新的列表,并可能占用更多的内存。
5、注意循环引用:如果你在创建迭代器后长时间保持对它的引用,并且原始数据也保持活跃(例如,在类实例中),那么可能会导致循环引用和内存泄漏,但是,这通常不是reversed()函数特有的问题,而是Python中任何涉及迭代器和引用计数的问题。
6、与切片相比:对于列表,你可以使用切片(例如,some_list[::-1])来获取一个反向的列表副本;与reversed()函数相比,切片会立即创建一个新的列表,并消耗更多的内存,然而,切片的结果是一个列表,可以多次遍历,而reversed()函数的结果是一个迭代器,只能遍历一次。
7、与Python 2的xrange()不同:在Python 2中,xrange()函数返回一个类似于迭代器的对象,但它可以反向迭代(尽管这并不是其设计的主要目的);在Python 3中,range()函数返回的是一个真正的迭代器,并且不能直接反向迭代(但你可以使用reversed(range(start, stop, step)))。
8、与for循环一起使用:reversed()函数经常与for循环一起使用,以反向遍历序列。例如:for i in reversed(some_list): print(i)。

三、如何用好reversed函数?

1、基本用法:

1-1、字符串的反转:

  1. s = "hello"
  2. for char in reversed(s):
  3.     print(char, end="")
  4. # 输出: "olleh"

1-2、列表的反转:

  1. lst = [1, 2, 3, 4, 5]
  2. for num in reversed(lst):
  3.     print(num)
  4. # 输出: 5, 4, 3, 2, 1

1-3、元组的反转:

  1. tup = (1, 2, 3, 4, 5)
  2. for num in reversed(tup):
  3.     print(num)
  4. # 输出: 5, 4, 3, 2, 1

2、高级用法:

2-1、反转字典的键或值(注意:字典本身没有顺序,但你可以反转它的键或值的列表):

  1. d = {'a': 1, 'b': 2, 'c': 3}
  2. for key in reversed(list(d.keys())):
  3.     print(key, d[key])
  4. # 输出可能是: c 3, b 2, a 1(取决于Python版本和哈希种子)
  5. for value in reversed(sorted(d.values())):
  6.     for key, val in d.items():
  7.         if val == value:
  8.             print(key, value)
  9.             break
  10. # 输出: c 3, b 2, a 1(这次顺序是确定的)

2-2、反转文件行(如果你有一个大文件并且不想一次性加载到内存中):

  1. with open('large_file.txt', 'r') as file:
  2.     for line in reversed(list(file)):
  3.         print(line.strip())  # strip()用于移除行尾的换行符
  4. # 注意:这会将整个文件加载到内存中,对于大文件可能会导致内存问题
  5. # 对于大文件,你可能需要逐行读取并存储在列表中,然后反转列表

2-3、与其他迭代器结合使用:你可以将reversed()函数与其他迭代器(如range()或其他生成器)结合使用,但通常range()是从低到高生成数字,所以直接使用reversed(range(...))可能不太直观,但你可以创建一个反向的range类似物。

  1. def reverse_range(start, end):
  2.     return reversed(range(end, start - 1, -1))
  3. for num in reverse_range(5, 1):
  4.     print(num)
  5. # 输出: 5, 4, 3, 2

2-4、在列表推导式中使用:虽然直接在列表推导式中使用reversed()可能不太常见,但你可以这样做。

  1. lst = [1, 2, 3, 4, 5]
  2. reversed_lst = [x * 2 for x in reversed(lst)]
  3. print(reversed_lst)  # 输出: [10, 8, 6, 4, 2]

 

 

1、reversed函数:
1-1、Python:
  1. # 1.函数:reversed
  2. # 2.功能:用于反转一个序列对象,将其元素从后向前颠倒构建成一个新的迭代器
  3. # 3.语法:reversed(seq)
  4. # 4.参数:seq,表示序列,如列表/元组/字符串/range对象等
  5. # 5.返回值:返回一个反转的迭代器
  6. # 6.说明:反向迭代器只有在待处理对象拥有可确定的大小,并且该对象实现了__reversed__()魔法方法时,才能奏效
  7. # 7.示例:
  8. # 用dir()函数获取该函数内置的属性和方法
  9. print(dir(reversed))
  10. # ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__',
  11. # '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__length_hint__', '__lt__', '__ne__', '__new__',
  12. # '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__']
  13. # 用help()函数获取该函数的文档信息
  14. help(reversed)
  15. # 应用一:序列反转
  16. # 示例1:字符串反转
  17. s = "myelsa"
  18. reversed_s = ''.join(reversed(s))
  19. print(reversed_s)
  20. # asleym
  21. # 示例2:列表反转
  22. lst = [3, 5, 6, 8, 10, 11, 24]
  23. reversed_lst = list(reversed(lst))
  24. print(reversed_lst)
  25. # [24, 11, 10, 8, 6, 5, 3]
  26. # 示例3:元组反转
  27. tup = (1, 2, 3, 4, 5)
  28. reversed_tup = tuple(reversed(tup))
  29. print(reversed_tup)
  30. # (5, 4, 3, 2, 1)
  31. # 示例4:字典的键或值反转
  32. d = {'a': 1, 'b': 2, 'c': 3}
  33. reversed_keys = list(reversed(list(d.keys())))
  34. print(reversed_keys) # 输出可能是: ['c', 'b', 'a'](取决于Python版本和哈希种子)
  35. reversed_values = list(reversed(sorted(d.values())))
  36. print(reversed_values) # 输出: [3, 2, 1]
  37. # ['c', 'b', 'a']
  38. # [3, 2, 1]
  39. # 示例5:文件行反转
  40. with open('test.txt', 'r') as f:
  41. lines = f.readlines()
  42. reversed_lines = reversed(lines)
  43. for line in reversed_lines:
  44. print(line.strip()) # 移除行尾的换行符并打印
  45. # 6666
  46. # 5555
  47. # 4444
  48. # 3333
  49. # 2222
  50. # 11111
  51. # 示例6:使用range和reversed创建递减序列
  52. for i in reversed(range(1, 6)):
  53. print(i)
  54. # 5
  55. # 4
  56. # 3
  57. # 2
  58. # 1
  59. # 示例7:在列表推导式中使用reversed
  60. lst = [1, 2, 3, 4, 5]
  61. squared_reversed = [x**2 for x in reversed(lst)]
  62. print(squared_reversed)
  63. # [25, 16, 9, 4, 1]
  64. # 应用二:与生成器表达式结合
  65. # 示例1:将生成器表达式的值转换为列表,然后使用reversed()
  66. # 生成器表达式,产生0到9的偶数
  67. even_numbers = (x for x in range(10) if x % 2 == 0)
  68. # 将生成器表达式的值转换为列表
  69. even_numbers_list = list(even_numbers)
  70. # 使用reversed()反转列表
  71. reversed_even_numbers = reversed(even_numbers_list)
  72. # 遍历反转后的序列
  73. for num in reversed_even_numbers:
  74. print(num)
  75. # 8
  76. # 6
  77. # 4
  78. # 2
  79. # 0
  80. # 示例2:直接使用列表推导式与reversed()结合(无需生成器表达式)
  81. # 列表推导式,产生0到9的偶数
  82. even_numbers_list = [x for x in range(10) if x % 2 == 0]
  83. # 使用reversed()反转列表
  84. reversed_even_numbers = reversed(even_numbers_list)
  85. # 遍历反转后的序列
  86. for num in reversed_even_numbers:
  87. print(num)
  88. # 8
  89. # 6
  90. # 4
  91. # 2
  92. # 0
  93. # 示例3:模拟一个只能遍历一次的迭代器,并使用列表存储其值以便反转
  94. # 假设我们有一个只能遍历一次的迭代器
  95. def one_time_iterator(n):
  96. for i in range(n):
  97. yield i
  98. # 使用迭代器
  99. it = one_time_iterator(5)
  100. # 将迭代器的值存储在一个列表中
  101. values = list(it)
  102. # 使用reversed()反转列表
  103. reversed_values = reversed(values)
  104. # 遍历反转后的序列
  105. for value in reversed_values:
  106. print(value)
  107. # 4
  108. # 3
  109. # 2
  110. # 1
  111. # 0
  112. # 应用三:图形和图像处理
  113. # 示例1:反转图像的像素值(仅用于说明,通常不这样做)
  114. from PIL import Image
  115. import numpy as np
  116. # 加载图像
  117. image = Image.open('input.jpg')
  118. # 将图像转换为NumPy数组
  119. image_array = np.array(image)
  120. # 假设我们有一个简单的示例,只反转红色通道的值(这通常不会得到有用的结果)
  121. # 注意:这里仅用于演示,不是实际的图像处理操作
  122. reversed_red_channel = reversed(image_array[:, :, 0].flatten())
  123. # 由于reversed()返回的是一个迭代器,我们需要将其转换回数组
  124. # 但由于这通常不是一个有用的操作,所以我们只打印几个值作为示例
  125. for value in list(reversed_red_channel)[:5]:
  126. print(value)
  127. # 如果你真的想将修改后的值应用回图像(但请记住,这通常不是一个好的图像处理实践)
  128. # 你需要创建一个新的数组,并将值复制回去,但这里我们仅展示概念
  129. # new_image_array = ... # 你需要在这里实现适当的逻辑来创建新的数组
  130. # 显示原始图像(如果需要)
  131. image.show()
  132. # 示例2:反转图像的行或列(更实际的图像处理操作)
  133. from PIL import Image
  134. import numpy as np
  135. # 加载图像
  136. image = Image.open('input.jpg')
  137. # 将图像转换为NumPy数组
  138. image_array = np.array(image)
  139. # 反转图像的行(上下翻转)
  140. reversed_rows = image_array[::-1, :, :]
  141. # 或者反转图像的列(左右翻转)
  142. reversed_cols = image_array[:, ::-1, :]
  143. # 将NumPy数组转换回PIL图像并显示
  144. reversed_rows_image = Image.fromarray(reversed_rows)
  145. reversed_rows_image.show()
  146. reversed_cols_image = Image.fromarray(reversed_cols)
  147. reversed_cols_image.show()
  148. image.show()
  149. # 应用四:与集合操作结合
  150. # 示例1:将集合转换为列表并使用reversed()
  151. s = {1, 2, 3, 4, 5}
  152. reversed_list = list(reversed(list(s)))
  153. print(reversed_list)
  154. # [5, 4, 3, 2, 1]
  155. # 示例2:使用集合操作后转换为列表并使用reversed()
  156. s1 = {1, 2, 3, 4, 5}
  157. s2 = {4, 5, 6, 7, 8}
  158. # 找出两个集合的交集
  159. intersection = s1.intersection(s2)
  160. # 将交集转换为列表并使用reversed()
  161. reversed_intersection = list(reversed(list(intersection)))
  162. print(reversed_intersection) # 输出:[5, 4],但注意顺序可能因集合无序而有所不同
  163. # [5, 4]
  164. # 示例3:使用集合操作后转换为有序集合(如果需要保持顺序)
  165. from collections import OrderedDict
  166. # 假设你有一个保持插入顺序的“集合”(使用OrderedDict的键)
  167. ordered_set = OrderedDict.fromkeys([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])
  168. # 转换为列表并使用reversed()
  169. reversed_list = list(reversed(list(ordered_set)))
  170. print(reversed_list)
  171. # [6, 2, 9, 5, 4, 1, 3]
  172. # 应用五:算法和数学问题
  173. # 示例1:反转数组并计算其和
  174. def reverse_and_sum(arr):
  175. reversed_arr = list(reversed(arr))
  176. return sum(reversed_arr)
  177. # 示例数组
  178. numbers = [3, 5, 6, 8, 10, 11, 24]
  179. print(reverse_and_sum(numbers))
  180. # 67
  181. # 示例2:回文数检测
  182. def is_palindrome(num):
  183. # 将整数转换为字符串
  184. str_num = str(num)
  185. # 反转字符串
  186. reversed_str = ''.join(reversed(str_num))
  187. # 比较反转后的字符串和原字符串是否相同
  188. return str_num == reversed_str
  189. # 示例数字
  190. num = 66866
  191. print(is_palindrome(num))
  192. # True
  193. # 示例3:反转链表
  194. class ListNode:
  195. def __init__(self, val=0, next=None):
  196. self.val = val
  197. self.next = next
  198. def reverse_linked_list(head):
  199. prev = None
  200. current = head
  201. while current:
  202. # 保存下一个节点,因为在反转当前节点后,我们将失去对它的引用
  203. next_node = current.next
  204. # 反转当前节点的指向
  205. current.next = prev
  206. # 移动指针
  207. prev = current
  208. current = next_node
  209. return prev # prev 现在是新的头节点
  210. # 创建链表:1 -> 2 -> 3 -> 4 -> 5
  211. head = ListNode(1)
  212. head.next = ListNode(2)
  213. head.next.next = ListNode(3)
  214. head.next.next.next = ListNode(4)
  215. head.next.next.next.next = ListNode(5)
  216. # 反转链表
  217. reversed_head = reverse_linked_list(head)
  218. # 辅助函数:打印链表
  219. def print_list(head):
  220. current = head
  221. while current:
  222. print(current.val, end=' -> ') # 使用end参数在元素之间添加箭头和空格
  223. current = current.next
  224. print('None') # 链表末尾打印 None
  225. print_list(reversed_head)
  226. # 5 -> 4 -> 3 -> 2 -> 1 -> None
  227. # 应用六:与内置函数结合
  228. # 示例1:使用reversed()和list()转换为一个列表
  229. # 创建一个元组
  230. my_tuple = (1, 2, 3, 4, 5)
  231. # 使用reversed()和list()将其转换为反向的列表
  232. reversed_list = list(reversed(my_tuple))
  233. print(reversed_list)
  234. # [5, 4, 3, 2, 1]
  235. # 示例2:使用reversed()和sum()计算反向序列的和
  236. # 创建一个列表
  237. my_list = [3, 5, 6, 8, 10, 11, 24]
  238. # 使用reversed()和sum()计算反向序列的和
  239. sum_reversed = sum(reversed(my_list))
  240. print(sum_reversed)
  241. # 67
  242. # 示例3:使用reversed()和all()或any()检查条件
  243. # 创建一个列表
  244. my_list = [1, 2, 3, 4, 5]
  245. # 使用reversed()和all()检查所有元素是否都大于3(反向检查)
  246. all_greater_than_three = all(x > 3 for x in reversed(my_list))
  247. print(all_greater_than_three)
  248. # 使用reversed()和any()检查是否有元素大于3(反向检查)
  249. any_greater_than_three = any(x > 3 for x in reversed(my_list))
  250. print(any_greater_than_three)
  251. # False
  252. # True
  253. # 示例4:使用reversed()和sorted()(尽管它们通常不一起使用)
  254. # 创建一个列表
  255. my_list = [5, 1, 4, 2, 3]
  256. # 先排序,然后反转
  257. reversed_sorted = list(reversed(sorted(my_list)))
  258. print(reversed_sorted)
  259. # [5, 4, 3, 2, 1]
  260. # 示例5:使用reversed()和列表推导式
  261. # 创建一个列表
  262. my_list = [1, 2, 3, 4, 5]
  263. # 使用reversed()和列表推导式来创建一个新列表,其中每个元素是原列表中对应元素的平方(反向)
  264. squared_reversed = [x ** 2 for x in reversed(my_list)]
  265. print(squared_reversed)
  266. # [25, 16, 9, 4, 1]
  267. # 应用七:文件路径处理
  268. # 示例1:反转目录名列表
  269. # 假设你有一个目录名列表
  270. dir_names = ['folder1', 'folder2', 'folder3']
  271. # 使用reversed()反转列表
  272. reversed_dir_names = list(reversed(dir_names))
  273. # 打印反转后的列表
  274. print(reversed_dir_names) # 输出: ['folder3', 'folder2', 'folder1']
  275. # 你可以使用os.path.join来构建路径(但通常不会以反转的顺序)
  276. import os
  277. path_components = ['/base/path'] + reversed_dir_names
  278. full_path = os.path.join(*path_components)
  279. print(full_path) # 输出: /base/path/folder3/folder2/folder1(注意这不是一个常见或推荐的路径构建方式)
  280. # ['folder3', 'folder2', 'folder1']
  281. # /base/path\folder3\folder2\folder1
  282. # 示例2:反转文件扩展名与基本名
  283. import os
  284. # 假设你有一个文件名
  285. filename = 'test.txt'
  286. # 使用 os.path 分割文件名和扩展名
  287. base, ext = os.path.splitext(filename)
  288. # 你可以“反转”它们的位置(尽管这不是真正的反转)
  289. reversed_parts = (ext[1:] if ext else '', base) # 注意:我们移除了扩展名前的点(.)
  290. print(reversed_parts)
  291. # 但通常你不会这样组合它们,除非有特殊的需求
  292. reversed_filename = ''.join(reversed_parts) if not reversed_parts[0] else f"{reversed_parts[1]}.{reversed_parts[0]}"
  293. print(reversed_filename)
  294. # ('txt', 'test')
  295. # test.txt
  296. # 示例3:处理文件路径中的各个部分
  297. import os
  298. # 假设你有一个文件路径
  299. file_path = '/home/user/documents/file.txt'
  300. # 使用os.path.split()递归地分割路径,直到只剩下一个部分
  301. parts = []
  302. while True:
  303. head, tail = os.path.split(file_path)
  304. if tail:
  305. parts.append(tail)
  306. file_path = head
  307. else:
  308. if head:
  309. parts.append(head)
  310. break
  311. # 反转部分列表(除了可能的根目录)
  312. reversed_parts = list(reversed(parts[1:])) if len(parts) > 1 else parts # 忽略可能的根目录(如 '/')
  313. # 打印反转后的部分
  314. print(reversed_parts)
  315. # 你可以使用 os.path.join() 以原始顺序重新组合路径(如果需要)
  316. original_path = os.path.join(*reversed(reversed_parts[::-1]))
  317. print(original_path)
  318. # ['/', 'home', 'user', 'documents']
  319. # /home\user\documents
  320. # 应用八:处理栈或队列数据结构
  321. # 示例1:使用reversed()遍历栈的内容
  322. class Stack:
  323. def __init__(self):
  324. self.items = []
  325. def push(self, item):
  326. self.items.append(item)
  327. def pop(self):
  328. if not self.is_empty():
  329. return self.items.pop()
  330. else:
  331. raise IndexError("Pop from an empty stack")
  332. def is_empty(self):
  333. return len(self.items) == 0
  334. # 添加一个方法来从后向前遍历栈的内容
  335. def reverse_traverse(self):
  336. for item in reversed(self.items):
  337. print(item)
  338. # 使用栈
  339. stack = Stack()
  340. stack.push(1)
  341. stack.push(2)
  342. stack.push(3)
  343. # 从后向前遍历栈的内容
  344. stack.reverse_traverse()
  345. # 3
  346. # 2
  347. # 1
  348. # 示例2:使用reversed()遍历队列的内容(虽然不常见)
  349. from collections import deque
  350. class Queue:
  351. def __init__(self):
  352. self.items = deque()
  353. def enqueue(self, item):
  354. self.items.append(item)
  355. def dequeue(self):
  356. if not self.is_empty():
  357. return self.items.popleft()
  358. else:
  359. raise IndexError("Dequeue from an empty queue")
  360. def is_empty(self):
  361. return len(self.items) == 0
  362. # 添加一个方法来从后向前遍历队列的内容(虽然不常见)
  363. def reverse_traverse(self):
  364. for item in reversed(list(self.items)):
  365. print(item)
  366. # 使用队列
  367. queue = Queue()
  368. queue.enqueue(1)
  369. queue.enqueue(2)
  370. queue.enqueue(3)
  371. # 从后向前遍历队列的内容(虽然不常见)
  372. queue.reverse_traverse()
  373. # 3
  374. # 2
  375. # 1
  376. # 应用九:与切片结合
  377. # 示例1:先切片再反转
  378. my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  379. # 切片获取列表的前5个元素
  380. slice_of_list = my_list[:5]
  381. # 使用reversed()函数来反向迭代切片
  382. for item in reversed(slice_of_list):
  383. print(item)
  384. # 4
  385. # 3
  386. # 2
  387. # 1
  388. # 0
  389. # 示例2:反转整个列表并切片
  390. my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  391. # 使用reversed()函数来反转整个列表
  392. reversed_list = list(reversed(my_list))
  393. # 对反转后的列表进行切片,获取最后3个元素
  394. slice_of_reversed_list = reversed_list[-3:]
  395. print(slice_of_reversed_list)
  396. # [2, 1, 0]
  397. # 示例3:使用切片和reversed()创建自定义迭代器
  398. class ReverseSliceIterator:
  399. def __init__(self, lst, start, stop):
  400. self.lst = lst[start:stop] # 切片
  401. self.lst_reversed = reversed(self.lst) # 反转切片
  402. def __iter__(self):
  403. return self
  404. def __next__(self):
  405. try:
  406. return next(self.lst_reversed) # 迭代反转的切片
  407. except StopIteration:
  408. raise StopIteration
  409. # 使用自定义迭代器
  410. my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  411. iterator = ReverseSliceIterator(my_list, 3, 8)
  412. for item in iterator:
  413. print(item)
  414. # 7
  415. # 6
  416. # 5
  417. # 4
  418. # 3
  419. # 应用十:与文件操作结合
  420. # 示例1:逐行读取文件,然后将内容列表反转
  421. # 假设有一个文件test.txt,内容如下:
  422. # apple
  423. # banana
  424. # cherry
  425. # date
  426. with open('test.txt', 'r') as file:
  427. lines = file.readlines() # 读取所有行到列表中
  428. # 使用reversed()来反向迭代列表
  429. for line in reversed(lines):
  430. print(line.strip()) # 去除行尾的换行符并打印
  431. # date
  432. # cherry
  433. # banana
  434. # apple
  435. # 示例2:使用reversed()和enumerate()一起处理文件内容
  436. with open('test.txt', 'r') as file:
  437. lines = file.readlines() # 读取所有行到列表中
  438. # 使用enumerate()和reversed()结合
  439. for index, line in reversed(list(enumerate(lines, start=1))):
  440. print(f"Line {index}: {line.strip()}")
  441. # Line 4: date
  442. # Line 3: cherry
  443. # Line 2: banana
  444. # Line 1: apple
  445. # 示例3:逐块读取大文件并反转每个块
  446. import itertools as itl
  447. chunk_size = 4 # 假设我们每次读取4行作为一个块
  448. with open('test.txt', 'r') as file:
  449. while True:
  450. chunk = list(itl.islice(file, chunk_size)) # 使用islice来逐块读取文件
  451. if not chunk: # 如果块为空,说明已经到达文件末尾
  452. break
  453. # 反转块内的行顺序
  454. reversed_chunk = reversed(chunk)
  455. # 处理反转后的块(例如,打印出来)
  456. for line in reversed_chunk:
  457. print(line.strip(), end='') # 不添加换行符以保持块的连续性
  458. print() # 块处理完毕后添加一个换行符以便区分不同块
  459. # 输出会根据chunk_size和文件内容而变化
  460. # datecherrybananaapple
1-2、VBA:
略,待后补。
2、推荐阅读:

2-1、Python-VBA函数之旅-repr()函数

Python算法之旅:Algorithm

Python函数之旅:Functions

个人主页: https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421
文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览61139 人正在系统学习中
遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://myelsa1024.blog.csdn.net/article/details/138577129"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top