gpt4 book ai didi

python - 在列表中查找通用子列表

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:18 25 4
gpt4 key购买 nike

刚开始学习 Python 作为我的第一门编码语言。给定一个包含许多可能的子列表的列表,这些子列表具有可变数量的元素,有没有一种方法可以使用正则表达式(或类似的东西)来识别哪些列表包含子列表,其中 1)指定的元素数和 2)给定的某种顺序的内容类型(包括其他子列表)?例如(伪代码):

list1 = [1, 4, 7, ["a", 5, "b"], 2, 4,7,"k",9]
list2 = [1, 4, 7, ["a", "h", "b"], 2]
list3 = [1, 4, 7, ["a", ["a", 6, "b"], "b"], 5, 3]

list4 = [1, 4, 7, ["a", "b"], 3, 4]
list5 = [1, 4, 7, ["a", 5, "b", 7], 3, 4]

if ["a", ., "b"] in listx: # where "." stands for anything, even sub-lists
print("yes")
else:
print("no")

list1、list2 和 list3 应打印“yes”,但 list4 和 list5 应打印“no”。

作为奖励,有没有办法返回 1) 找到指定通用子列表的次数以及 2) 在哪里?例如,让 list3 返回“有 2 个 ["a", ., "b"] 子列表,分别是 list3[3] 和 list3[3][1]”

我知道我可以将整个内容转换为字符串并对其进行解析,但这似乎不是一个非常优雅或高效的解决方案。谢谢!

最佳答案

我同意转换为字符串在这里没有任何意义,但正则表达式明确搜索字符串,因此您也不需要寻找它。您正在寻找一种递归解决方案来测试您的规则,这些规则(本质上)是

somelist IS or CONTAINS a list that begins with the string "a", ends with the string "b", and has three or more elements.

将其编码为:

def flat_pass(lst):
return len(lst) >= 3 and lst[0] == 'a' and lst[-1] == 'b'

现在你只需要递归(捕捉上面规则的“CONTAINS”部分)

def recurse_pass(lst):
if len(lst) >= 3 and lst[0] == 'a' and lst[-1] == 'b':
# base case
return True
# otherwise, flow continues...
for el in lst:
if isinstance(el, list):
# recursive case
if recurse_pass(el):
return True
return False

关于python - 在列表中查找通用子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com