Python 3.6:如何检测列表中特定字符串与整数的存在?
嘿,我来帮你搞定这两个在Python 3.6里的列表检测问题,都是很实用的场景,咱们一步步来:
一、检测列表是否同时包含带字母的字符串以及整数
首先明确需求:我们要确认列表里同时存在两种元素——一是整数类型的元素,二是包含至少一个字母的字符串(注意全数字的字符串不算哦,比如"123"这种不符合要求)。
这里给你写一个高效的检测函数,遍历一次列表就能完成判断,还能提前终止循环优化效率:
def has_letter_string_and_int(lst): has_integer = False has_letter_containing_str = False for item in lst: # 检查当前元素是否是整数 if isinstance(item, int): has_integer = True # 检查当前元素是字符串且包含字母 elif isinstance(item, str): # any()会逐个检查字符,只要有一个是字母就返回True if any(char.isalpha() for char in item): has_letter_containing_str = True # 一旦两个条件都满足,直接返回True,不用继续遍历 if has_integer and has_letter_containing_str: return True # 遍历完所有元素后,确认是否两个条件都达成 return has_integer and has_letter_containing_str
来几个测试案例验证下:
has_letter_string_and_int(["apple", 100])→ 返回True(同时满足两个条件)has_letter_string_and_int(["1234", 567])→ 返回False(字符串全是数字,没有带字母的)has_letter_string_and_int(["banana", "orange"])→ 返回False(没有整数元素)has_letter_string_and_int([12, 34])→ 返回False(没有带字母的字符串)
二、检测列表是否包含本身不含任何数字的字符串
这个需求是找列表里有没有纯字母(或不含数字的)字符串——也就是字符串里完全没有0-9的数字字符。同样写个简洁的函数:
def has_non_digit_string(lst): for item in lst: # 先判断是不是字符串类型 if isinstance(item, str): # not any() 表示:没有任何一个字符是数字 if not any(char.isdigit() for char in item): return True # 遍历完没找到符合条件的字符串,返回False return False
测试案例:
has_non_digit_string(["hello", 123])→ 返回True("hello"不含数字)has_non_digit_string(["abc123", 456])→ 返回False(字符串里有数字)has_non_digit_string([789, 1011])→ 返回False(列表里没有字符串)has_non_digit_string(["test", "code4you"])→ 返回True("test"不含数字)
小提醒
因为你提到列表里只有字母/数字组成的字符串和整数,所以我们不用考虑布尔值(True/False在Python里是int的子类,但如果你的场景里有布尔值,需要额外加判断排除,比如if isinstance(item, int) and not isinstance(item, bool)),不过按你给出的前提,当前的函数已经够用啦。
内容的提问来源于stack exchange,提问作者Kozer H
相关产品推荐
相关产品推荐

