当前位置:   article > 正文

Python-VBA函数之旅-any函数

Python-VBA函数之旅-any函数

目录

1、any函数:

1-1、Python:

1-2、VBA:

2、相关文章:

个人主页:非风V非雨-CSDN博客

        any函数在 Python 中有许多实际的应用场景,主要用于检查一个可迭代对象是否包含至少一个满足特定条件的元素。常见的应用场景有:

1、空值检查:在数据处理或分析过程中,我们经常需要检查数据集中是否存在缺失值。在这种情况下,可以使用 any()函数来检查数据集中是否存在任何空值。

2、条件筛选:在数据处理和分析中,我们经常需要根据某些条件筛选数据。可以使用any()函数与布尔索引来实现条件筛选。

3、决策制定:在决策制定过程中,我们经常需要检查是否满足某些条件。可以使用any()函数来判断条件是否满足。

4、验证存在性:用于判断可迭代对象中是否存在至少一个满足指定条件的元素。any函数返回一个布尔值,如果存在满足条件的元素,则返回True;如果所有元素都不满足条件,则返回False。

5、代码简化:在编程中,可以使用any()函数简化代码,从而使程序更加精简。

6、提前终止迭代:当使用any()函数时,一旦找到满足条件的元素,迭代就会立即停止。这可以用于优化性能,特别是当你知道一旦找到符合条件的元素就可以停止搜索时。

7、配合其他函数使用:any()函数也可以与其他函数结合使用,例如,map()或filter(),以检查转换或过滤后的元素是否满足条件。

        总之,any()函数在处理可迭代对象时提供了一种高效的方式来检查是否满足特定的条件,它在各种编程场景中都非常有用。 

1、any函数:
1-1、Python:
  1. # 1.函数:any
  2. # 2.功能:判断可迭代对象是否全为假值
  3. # 3.语法:any(iterable)
  4. # 4.参数:Python中的可迭代对象iterable包括但不限于以下类型:
  5. # 4-1、序列类型:
  6. # list(列表):有序的元素集合
  7. # tuple(元组):不可变的有序的元素集合
  8. # str(字符串):字符的有序集合
  9. # bytes(字节序列):字节的有序集合
  10. # bytearray(可变字节序列):可变的字节的有序集合
  11. # range(范围对象):表示一个不可变的整数序列
  12. # memoryview(内存视图):用于在不需要复制数据的情况下访问对象的内存
  13. # 4-2、集合类型:
  14. # set(集合):无序且不包含重复元素的集合
  15. # frozenset(冻结集合):不可变的无序且不包含重复元素的集合
  16. # 4-3、字典与字典视图:
  17. # dict(字典):无序的键值对集合
  18. # dict的keys()、values()、items()方法返回的视图对象
  19. # 4-4、文件对象:
  20. # 打开的文件对象也是可迭代的,可以通过迭代逐行读取文件内容
  21. # 4-5、自定义可迭代对象:
  22. # 任何定义了__iter__()方法的对象都可以被视为可迭代对象。这个方法应该返回一个迭代器对象
  23. # 4-6、生成器:
  24. # 生成器函数和生成器表达式创建的生成器对象也是可迭代的
  25. # 4-7、其他内置类型:
  26. # 某些内置的数据类型或函数返回的对象也可能是可迭代的,比如map、filter、zip等函数返回的对象
  27. # 5.返回值:
  28. # 5-1、如果可迭代对象iterable中至少有一个元素为True(或者能够转换为True的值,比如非零数字、非空字符串等),则返回True.
  29. # 5-2、如果可迭代对象iterable为空或者所有元素都为False(或能够转换为False的值,比如0、None、空字符串等),则返回False.
  30. # (类似于逻辑运算符or连接≥2个以上条件时的效果,即任何一个条件成立,则返回True;反之,则返回False.)
  31. # 6.说明:
  32. # 6-1、如果可迭代对象中元素个数为0,则返回值为False,例如,空列表、空元组、空字典的返回值为False.
  33. # 6-2、当any()函数的参数为空或不可迭代对象时,将提示TypeError错误信息:
  34. # print(any())
  35. # TypeError: any() takes exactly one argument (0 given)
  36. # print(any(1024))
  37. # TypeError: 'int' object is not iterable
  38. # 7.示例:
  39. # 应用1:空值检查
  40. import pandas as pd
  41. data = pd.DataFrame({'A': [3, 5, None], 'B': [6, 8, 10]})
  42. print(data.isnull().any())
  43. # 应用2:条件筛选
  44. # 定义一个数字列表
  45. numbers = [1, 3, 5, 7, 9]
  46. # 使用any()函数和 lambda 表达式来检查是否至少有一个偶数
  47. has_even_number = any(num % 2 == 0 for num in numbers)
  48. # 输出结果
  49. print(has_even_number) # 输出:False,因为列表中没有偶数
  50. # 假设我们改变列表,添加一个偶数
  51. numbers.append(8)
  52. # 再次检查
  53. has_even_number = any(num % 2 == 0 for num in numbers)
  54. # 输出结果
  55. print(has_even_number) # 输出:True,因为列表中至少有一个偶数(数字8)
  56. # 应用3:决策制定
  57. conditions = [True, False, True]
  58. if any(conditions):
  59. print("至少有一个条件是成立的!")
  60. # 应用4:验证存在性
  61. # 检查列表中是否有非零元素
  62. numbers = [0, 0, 0, 1, 0]
  63. if any(numbers):
  64. print("列表中有非零元素")
  65. else:
  66. print("列表中所有元素都是零")
  67. # 检查集合中是否有非空字符串
  68. strings = {'', 'hello', ''}
  69. if any(strings):
  70. print("集合中有非空字符串")
  71. else:
  72. print("集合中所有字符串都是空的")
  73. # 检查字典中的值是否满足某个条件(例如,是否大于0)
  74. data = {'a': 1, 'b': -2, 'c': 3}
  75. if any(value > 0 for value in data.values()):
  76. print("字典中有正值")
  77. else:
  78. print("字典中没有正值")
  79. # 检查文件是否包含至少一行非空内容
  80. with open('file.txt', 'r') as file:
  81. if any(line.strip() for line in file):
  82. print("文件包含至少一行非空内容")
  83. else:
  84. print("文件为空或只包含空白行")
  85. # 应用5:代码简化
  86. # 使用any()简化多个条件判断
  87. conditions = [x > 5 for x in range(10)]
  88. if any(conditions):
  89. print("至少有一个条件为真")
  90. # 应用6:提前终止迭代
  91. # 假设我们有一个非常大的列表,并且我们只需要检查是否有任何元素大于10
  92. large_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] # 非常大的列表
  93. if any(x > 10 for x in large_list):
  94. print("列表中有元素大于10")
  95. # 应用7:配合其他函数使用
  96. # 使用any()函数与列表推导式和str.isdigit()方法来检查一个字符串列表中是否至少有一个字符串只包含数字.
  97. # 定义一个字符串列表
  98. strings = ['abc', '123', 'def456', '789', 'ghi']
  99. # 使用列表推导式和str.isdigit()方法来转换列表,检查每个字符串是否只包含数字
  100. # 然后使用any()函数来检查是否至少有一个字符串满足条件
  101. has_digit_string = any(s.isdigit() for s in strings)
  102. # 输出结果
  103. print(has_digit_string) # 输出:True,因为列表中至少有一个字符串('123')只包含数字
  104. # 现在,假设我们想要提取所有只包含数字的字符串
  105. # 我们可以使用 filter() 函数与 str.isdigit() 方法结合,并使用 list() 来获得结果列表
  106. digit_strings = list(filter(str.isdigit, strings))
  107. # 输出结果
  108. print(digit_strings) # 输出:['123', '789'],这些是列表中只包含数字的字符串
  109. # 我们还可以检查这个新列表是否非空,这实际上与之前的 any() 检查是等效的
  110. has_digit_string_filtered = bool(digit_strings)
  111. # 输出结果
  112. print(has_digit_string_filtered) # 输出:True,因为 digit_strings 列表非空
  113. # 8.运行结果:
  114. # A True
  115. # B False
  116. # dtype: bool
  117. # False
  118. # True
  119. # 至少有一个条件是成立的!
  120. # 列表中有非零元素
  121. # 集合中有非空字符串
  122. # 字典中有正值
  123. # 文件包含至少一行非空内容
  124. # 至少有一个条件为真
  125. # 列表中有元素大于10
  126. # True
  127. # ['123', '789']
  128. # True
1-2、VBA
  1. Rem 模拟Python中any函数应用1:空值检查
  2. ' 使用IsEmpty函数来检查一个变量是否为空值
  3. Sub CheckEmptyValue1()
  4. Dim rng As Range
  5. Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1")
  6. If IsEmpty(rng.value) Then
  7. MsgBox "单元格A1为空"
  8. Else
  9. MsgBox "单元格A1不为空"
  10. End If
  11. End Sub
  12. '请注意,IsEmpty函数只能用于检查变量是否已被初始化.如果单元格包含空格或零,IsEmpty函数将返回False.
  13. '如果你想要检查单元格是否真正没有任何内容(包括空格),你可能需要使用Len函数或检查单元格的值是否等于空字符串("").
  14. Sub CheckEmptyValue2()
  15. Dim rng As Range
  16. Set rng = ThisWorkbook.Sheets("Sheet1").Range("A1")
  17. If Len(Trim(rng.value)) = 0 Then
  18. MsgBox "单元格A1为空或只包含空格"
  19. Else
  20. MsgBox "单元格A1不为空"
  21. End If
  22. End Sub
  23. Rem 模拟Python中any函数应用2:条件筛选
  24. Sub CheckEvenNumbers()
  25. Dim numbers() As Variant
  26. Dim has_even_number As Boolean
  27. Dim i As Long
  28. ' 初始化numbers数组
  29. numbers = Array(1, 3, 5, 7, 9)
  30. ' 检查是否有偶数
  31. has_even_number = False
  32. For i = LBound(numbers) To UBound(numbers)
  33. If numbers(i) Mod 2 = 0 Then
  34. has_even_number = True
  35. Exit For ' 找到偶数后退出循环
  36. End If
  37. Next i
  38. ' 输出结果
  39. Debug.Print has_even_number
  40. ' 向数组添加元素
  41. ReDim Preserve numbers(UBound(numbers) + 1)
  42. numbers(UBound(numbers)) = 8
  43. ' 再次检查是否有偶数
  44. has_even_number = False
  45. For i = LBound(numbers) To UBound(numbers)
  46. If numbers(i) Mod 2 = 0 Then
  47. has_even_number = True
  48. Exit For ' 找到偶数后退出循环
  49. End If
  50. Next i
  51. ' 输出结果
  52. Debug.Print has_even_number
  53. End Sub
  54. Rem 模拟Python中any函数应用3:决策制定
  55. Sub CheckConditions()
  56. Dim conditions() As Variant
  57. Dim hasAnyTrue As Boolean
  58. Dim i As Integer
  59. ' 初始化conditions数组
  60. conditions = Array(True, False, True)
  61. ' 检查数组中是否有True值
  62. hasAnyTrue = False
  63. For i = LBound(conditions) To UBound(conditions)
  64. If conditions(i) Then
  65. hasAnyTrue = True
  66. Exit For ' 找到True后退出循环
  67. End If
  68. Next i
  69. ' 输出结果
  70. If hasAnyTrue Then
  71. Debug.Print "至少有一个条件是成立的!"
  72. Else
  73. Debug.Print "没有条件是成立的。"
  74. End If
  75. End Sub
  76. Rem 模拟Python中any函数应用4:验证存在性
  77. ' 检查数组中是否有非零元素
  78. Sub CheckNonZeroNumbers()
  79. Dim numbers() As Variant
  80. Dim hasNonZero As Boolean
  81. Dim i As Long
  82. ' 初始化numbers数组
  83. numbers = Array(0, 0, 0, 1, 0)
  84. ' 检查数组中是否有非零元素
  85. hasNonZero = False
  86. For i = LBound(numbers) To UBound(numbers)
  87. If numbers(i) <> 0 Then
  88. hasNonZero = True
  89. Exit For ' 找到非零元素后退出循环
  90. End If
  91. Next i
  92. ' 输出结果
  93. If hasNonZero Then
  94. Debug.Print "列表中有非零元素"
  95. Else
  96. Debug.Print "列表中所有元素都是零"
  97. End If
  98. End Sub
  99. ' 检查数组中是否有非空字符串
  100. Sub CheckNonEmptyStrings()
  101. Dim strings() As Variant
  102. Dim hasNonEmpty As Boolean
  103. Dim i As Long
  104. ' 初始化strings数组
  105. strings = Array("", "hello", "")
  106. ' 检查数组中是否有非空字符串
  107. hasNonEmpty = False
  108. For i = LBound(strings) To UBound(strings)
  109. If strings(i) <> "" Then
  110. hasNonEmpty = True
  111. Exit For ' 找到非空字符串后退出循环
  112. End If
  113. Next i
  114. ' 输出结果
  115. If hasNonEmpty Then
  116. Debug.Print "集合中有非空字符串"
  117. Else
  118. Debug.Print "集合中所有字符串都是空的"
  119. End If
  120. End Sub
  121. ' 检查字典中的值是否满足某个条件(例如,是否大于0)
  122. Sub CheckPositiveValuesInDictionary()
  123. Dim data As Object
  124. Dim key As Variant
  125. Dim hasPositiveValue As Boolean
  126. ' 创建Scripting.Dictionary对象实例
  127. Set data = CreateObject("Scripting.Dictionary") '需引用Microsoft Scripting Runtime控件
  128. ' 向字典中添加键值对
  129. With data
  130. .add "a", 1
  131. .add "b", -2
  132. .add "c", 3
  133. End With
  134. ' 检查字典中是否有正值
  135. hasPositiveValue = False
  136. For Each key In data.Keys
  137. If data(key) > 0 Then
  138. hasPositiveValue = True
  139. Exit For ' 找到正值后退出循环
  140. End If
  141. Next key
  142. ' 输出结果
  143. If hasPositiveValue Then
  144. Debug.Print "字典中有正值"
  145. Else
  146. Debug.Print "字典中没有正值"
  147. End If
  148. ' 清理:释放Dictionary对象
  149. Set data = Nothing
  150. End Sub
  151. ' 检查文件是否包含至少一行非空内容
  152. Sub CheckFileContent()
  153. Dim fso As Object
  154. Dim ts As Object
  155. Dim line As String
  156. Dim hasNonEmptyLine As Boolean
  157. ' 创建FileSystemObject实例
  158. Set fso = CreateObject("Scripting.FileSystemObject") '需要引用Microsoft Scripting Runtime控件
  159. ' 检查文件是否存在
  160. If Not fso.FileExists("E:\python_workspace\pythonProject\file.txt") Then ' 此处的路径根据实际情况调整即可
  161. MsgBox "文件不存在"
  162. Exit Sub
  163. End If
  164. ' 打开文件以读取内容
  165. Set ts = fso.OpenTextFile("E:\python_workspace\pythonProject\file.txt", 1) ' 1表示只读模式
  166. ' 初始化标志变量
  167. hasNonEmptyLine = False
  168. ' 逐行读取文件内容
  169. Do While Not ts.AtEndOfStream
  170. line = ts.ReadLine
  171. ' 去除行首尾的空白字符,并检查是否非空
  172. If Trim(line) <> "" Then
  173. hasNonEmptyLine = True
  174. Exit Do ' 找到非空行后退出循环
  175. End If
  176. Loop
  177. ' 关闭文件
  178. ts.Close
  179. Set ts = Nothing
  180. ' 输出结果
  181. If hasNonEmptyLine Then
  182. MsgBox "文件包含至少一行非空内容"
  183. Else
  184. MsgBox "文件为空或只包含空白行"
  185. End If
  186. ' 清理:释放FileSystemObject对象
  187. Set fso = Nothing
  188. End Sub
  189. Rem 模拟Python中any函数应用6:提前终止迭代
  190. Sub CheckForValuesGreaterThanTen()
  191. Dim large_list() As Variant
  192. Dim i As Long
  193. Dim hasGreaterThanTen As Boolean
  194. ' 初始化大型数组
  195. large_list = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)
  196. ' 假设没有大于10的元素
  197. hasGreaterThanTen = False
  198. ' 循环遍历数组中的每个元素
  199. For i = LBound(large_list) To UBound(large_list)
  200. ' 如果找到大于10的元素,设置标志并退出循环
  201. If large_list(i) > 10 Then
  202. hasGreaterThanTen = True
  203. Exit For
  204. End If
  205. Next i
  206. ' 输出结果
  207. If hasGreaterThanTen Then
  208. MsgBox "列表中有元素大于10"
  209. Else
  210. MsgBox "列表中所有元素都不大于10"
  211. End If
  212. End Sub

注意:1-2中的代码需粘贴到你的VBA编辑器中,按F5执行对应的Sub程序即可输出结果。 

2、相关文章:

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

2-2、Python-VBA函数之旅-all()函数 

2-3、Python-VBA函数之旅-ascii()函数 

2-4、Python-VBA函数之旅-bin()函数 

Python算法之旅:Myelsa的Python算法之旅(高铁直达)-CSDN博客

Python函数之旅:Myelsa的Python函数之旅(高铁直达)

个人主页:非风V非雨-CSDN博客

欢迎志同道合者一起交流学习,我的QQ:94509325/微信:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/539069
推荐阅读
相关标签
  

闽ICP备14008679号