如何从列表中的列表中过滤出字符串并附加到新列表
How to filter string out from a list inside a list and append to a new list
我试图从列表中的列表中过滤掉数据,但没有得到预期的输出。
我的清单:
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 lnk in lnks:
if "linkedin" in lnk:
try:
linkedin.append(lnk)
except:
linkedin.append("")
elif "twitter" in lnk:
try:
twitter.append(lnk)
except:
twitter.append("")
elif "facebook" in lnk:
try:
facebook.append(lnk)
except:
facebook.append("")
预期输出:
linkedin = ['adsd%linkedin.comhasdhu','vsdd%linkedin.comfsadfs','fvsdlinkedin.comsdfsf']
twitter = ['dfsdftwitter.comdsddf', '345r3ftwitter.comwer', 'wtwtwitter.comy4w4y']
facebook = ['sahasbfacebook.comdcs', 'sdfsdfsfacebook.comsfsdf', 'sdfefacebook.comswwert']
因为你原来的数据集是list of list。如果您使用调试器单步执行代码,您将看到 lnk 是一个列表,而不是我认为您期望的字符串。所以你的 if 条件永远不会满足,也不会附加任何内容。
您还可以更简洁地执行此操作:
lnks = [['adsd%linkedin.comhasdhu', 'sahasbfacebook.comdcs', 'dfsdftwitter.comdsddf'],
['vsdd%linkedin.comfsadfs', 'sdfsdfsfacebook.comsfsdf', '345r3ftwitter.comwer'],
['fvsdlinkedin.comsdfsf', 'sdfefacebook.comswwert', 'wtwtwitter.comy4w4y']]
linkedin = [[a for a in b if 'linkedin' in a][0] for b in lnks]
twitter = [[a for a in b if 'twitter' in a][0] for b in lnks]
facebook = [[a for a in b if 'facebook' in a][0] for b in lnks]
print(f'Linkedin: {linkedin}')
print(f'Twitter: {twitter}')
print(f'Facebook: {facebook}')
# Output
Linkedin: ['adsd%linkedin.comhasdhu', 'vsdd%linkedin.comfsadfs', 'fvsdlinkedin.comsdfsf']
Twitter: ['dfsdftwitter.comdsddf', '345r3ftwitter.comwer', 'wtwtwitter.comy4w4y']
Facebook: ['sahasbfacebook.comdcs', 'sdfsdfsfacebook.comsfsdf', 'sdfefacebook.comswwert']
有时带有条件的嵌套内联 for 循环看起来令人困惑,但它分解如下:
lnks = list of lists
b = list
a = string
# we specify [0] so that we end up returning 1 list populated with strings, and not another list of lists.
linkedin = []
twitter = []
facebook = []
for lnk in lnks:
for lnk2 in lnk:
if "linkedin" in lnk2:
try:
linkedin.append(lnk2)
except:
linkedin.append("")
elif "twitter" in lnk2:
try:
twitter.append(lnk2)
except:
twitter.append("")
elif "facebook" in lnk2:
try:
facebook.append(lnk2)
except:
facebook.append("")
这应该得到所需的输出
如果他们总是按那个顺序,你可以用 zip
:
lnks = [['adsd%linkedin.comhasdhu', 'sahasbfacebook.comdcs', 'dfsdftwitter.comdsddf'],
['vsdd%linkedin.comfsadfs', 'sdfsdfsfacebook.comsfsdf', '345r3ftwitter.comwer'],
['fvsdlinkedin.comsdfsf', 'sdfefacebook.comswwert', 'wtwtwitter.comy4w4y']]
linkedin, twitter, facebook = list(zip(*lnks))
输出如下:
print(linkedin, twitter, facebook, sep="\n\n")
('adsd%linkedin.comhasdhu', 'vsdd%linkedin.comfsadfs', 'fvsdlinkedin.comsdfsf')
('sahasbfacebook.comdcs', 'sdfsdfsfacebook.comsfsdf', 'sdfefacebook.comswwert')
('dfsdftwitter.comdsddf', '345r3ftwitter.comwer', 'wtwtwitter.comy4w4y')
我试图从列表中的列表中过滤掉数据,但没有得到预期的输出。
我的清单:
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 lnk in lnks:
if "linkedin" in lnk:
try:
linkedin.append(lnk)
except:
linkedin.append("")
elif "twitter" in lnk:
try:
twitter.append(lnk)
except:
twitter.append("")
elif "facebook" in lnk:
try:
facebook.append(lnk)
except:
facebook.append("")
预期输出:
linkedin = ['adsd%linkedin.comhasdhu','vsdd%linkedin.comfsadfs','fvsdlinkedin.comsdfsf']
twitter = ['dfsdftwitter.comdsddf', '345r3ftwitter.comwer', 'wtwtwitter.comy4w4y']
facebook = ['sahasbfacebook.comdcs', 'sdfsdfsfacebook.comsfsdf', 'sdfefacebook.comswwert']
因为你原来的数据集是list of list。如果您使用调试器单步执行代码,您将看到 lnk 是一个列表,而不是我认为您期望的字符串。所以你的 if 条件永远不会满足,也不会附加任何内容。
您还可以更简洁地执行此操作:
lnks = [['adsd%linkedin.comhasdhu', 'sahasbfacebook.comdcs', 'dfsdftwitter.comdsddf'],
['vsdd%linkedin.comfsadfs', 'sdfsdfsfacebook.comsfsdf', '345r3ftwitter.comwer'],
['fvsdlinkedin.comsdfsf', 'sdfefacebook.comswwert', 'wtwtwitter.comy4w4y']]
linkedin = [[a for a in b if 'linkedin' in a][0] for b in lnks]
twitter = [[a for a in b if 'twitter' in a][0] for b in lnks]
facebook = [[a for a in b if 'facebook' in a][0] for b in lnks]
print(f'Linkedin: {linkedin}')
print(f'Twitter: {twitter}')
print(f'Facebook: {facebook}')
# Output
Linkedin: ['adsd%linkedin.comhasdhu', 'vsdd%linkedin.comfsadfs', 'fvsdlinkedin.comsdfsf']
Twitter: ['dfsdftwitter.comdsddf', '345r3ftwitter.comwer', 'wtwtwitter.comy4w4y']
Facebook: ['sahasbfacebook.comdcs', 'sdfsdfsfacebook.comsfsdf', 'sdfefacebook.comswwert']
有时带有条件的嵌套内联 for 循环看起来令人困惑,但它分解如下:
lnks = list of lists
b = list
a = string
# we specify [0] so that we end up returning 1 list populated with strings, and not another list of lists.
linkedin = []
twitter = []
facebook = []
for lnk in lnks:
for lnk2 in lnk:
if "linkedin" in lnk2:
try:
linkedin.append(lnk2)
except:
linkedin.append("")
elif "twitter" in lnk2:
try:
twitter.append(lnk2)
except:
twitter.append("")
elif "facebook" in lnk2:
try:
facebook.append(lnk2)
except:
facebook.append("")
这应该得到所需的输出
如果他们总是按那个顺序,你可以用 zip
:
lnks = [['adsd%linkedin.comhasdhu', 'sahasbfacebook.comdcs', 'dfsdftwitter.comdsddf'],
['vsdd%linkedin.comfsadfs', 'sdfsdfsfacebook.comsfsdf', '345r3ftwitter.comwer'],
['fvsdlinkedin.comsdfsf', 'sdfefacebook.comswwert', 'wtwtwitter.comy4w4y']]
linkedin, twitter, facebook = list(zip(*lnks))
输出如下:
print(linkedin, twitter, facebook, sep="\n\n")
('adsd%linkedin.comhasdhu', 'vsdd%linkedin.comfsadfs', 'fvsdlinkedin.comsdfsf')
('sahasbfacebook.comdcs', 'sdfsdfsfacebook.comsfsdf', 'sdfefacebook.comswwert')
('dfsdftwitter.comdsddf', '345r3ftwitter.comwer', 'wtwtwitter.comy4w4y')