如何在Python中从嵌套列表过滤字符串并追加至新列表
嵌套列表域名筛选问题修正
错误原因
原代码的循环只走到了最外层的大列表层级,每次循环拿到的lnk是一个完整的子列表(比如第一趟循环拿到的就是['adsd%linkedin.comhasdhu', 'sahasbfacebook.comdcs', 'dfsdftwitter.comdsddf'])。此时执行if "linkedin" in lnk,是在检查这个子列表里有没有值为"linkedin"的元素,根本不会去检查子列表每个字符串内部的内容,所以所有判断都不会触发,自然得不到想要的结果。代码里嵌套的try-except块在这里完全没有作用,因为整个判断过程根本不会抛出异常。
修正方案
增加一层循环,先遍历外层列表拿到所有子列表,再遍历每个子列表取出单个字符串,再判断字符串内包含的域名标识,追加到对应的目标列表中即可。
可直接运行的修正代码
lnks = [ ['adsd%linkedin.comhasdhu', 'sahasbfacebook.comdcs', 'dfsdftwitter.comdsddf'], ['vsdd%linkedin.comfsadfs', 'sdfsdfsfacebook.comsfsdf', '345r3ftwitter.comwer'], ['fvsdlinkedin.comsdfsf', 'sdfefacebook.comswwert', 'wtwtwitter.comy4w4y'] ] linkedin = [] twitter = [] facebook = [] # 两层遍历,深入到子列表内部的字符串做判断 for sub_arr in lnks: for raw_str in sub_arr: if "linkedin" in raw_str: linkedin.append(raw_str) elif "twitter" in raw_str: twitter.append(raw_str) elif "facebook" in raw_str: facebook.append(raw_str)
运行后输出结果
代码运行后得到的三个列表完全符合预期:
- linkedin:
['adsd%linkedin.comhasdhu', 'vsdd%linkedin.comfsadfs', 'fvsdlinkedin.comsdfsf'] - twitter:
['dfsdftwitter.comdsddf', '345r3ftwitter.comwer', 'wtwtwitter.comy4w4y'] - facebook:
['sahasbfacebook.comdcs', 'sdfsdfsfacebook.comsfsdf', 'sdfefacebook.comswwert']
内容的提问来源于stack exchange,提问作者Goutam
相关产品推荐
相关产品推荐

