Python 在列表理解中使用else-np.nan

Python 在列表理解中使用else-np.nan,python,Python,我有一个网站列表,我只想提取社交媒体的个人资料,比如facebook、linkedin和pinterest import numpy as np mylist = ['linkedin.com/profilexyz','facebook.com/profile374','bbcnews.com/USA_news','stackoverflow.com'] 我使用列表理解来获取URL,如果找不到,则返回nan: facebook = [x for x in mylist if 'faceboo

我有一个网站列表,我只想提取社交媒体的个人资料,比如facebook、linkedin和pinterest

import numpy as np

mylist = ['linkedin.com/profilexyz','facebook.com/profile374','bbcnews.com/USA_news','stackoverflow.com']
我使用列表理解来获取URL,如果找不到,则返回nan:

facebook = [x for x in mylist if 'facebook' in x else np.nan for x in mylist]
linkedin = [x for x in mylist if 'linkedin' in x else np.nan for x in mylist]
pinterest = [x for x in mylist if 'pinterest' in x else np.nan for x in mylist]
但是我得到了一个错误:

File "<ipython-input-329-578130619ae7>", line 1
facebook = [x for x in mylist if 'facebook' in x else np.nan for x in mylist]
                                                        ^
SyntaxError: invalid syntax

我已经检查了建议的副本,比如这一个:但无法让我的理解发挥作用

这是一种使用collections.defaultdict和str.split的方法

例:

输出:


从列表中删除额外的for循环

O/p:

使用从列表中删除重复的nan值

O/p:


你的订单搞乱了,另外还要一份

fb = [x if 'facebook' in x else np.nan for x in mylist]
只需使用括号:

facebook = [(x for x in mylist) if 'facebook' in x else np.nan for x in mylist]
linkedin = [(x for x in mylist) if 'linkedin' in x else np.nan for x in mylist]
pinterest = [(x for x in mylist) if 'pinterest' in x else np.nan for x in mylist]

好的,谢谢。有没有办法只保留我们找到的值,而不是重复nan,nan,nan?如果找不到,我已经尝试只使用一个nan,但它不起作用:[x if'facebook'in x else np.nan]@SCool是的,您可以删除else条件并像这样重新编写列表理解,例如。[x for x in mylist if'facebook'in x]。@SCool您希望在列表中保留单个nan值,而不是重复nan值。列表理解不支持检查列表是否包含元素。在这种情况下,您应该尝试普通for循环并执行您想要的操作。@SCool更新了答案,说明如何从列表中删除重复的元素。您的参考信息仅返回包含url名称的结果。.OP需要np.nan,其中不存在匹配项,即结果列表的大小与original@DerekEden. 好的,我在OP的请求中没有看到这个条件,我想它没有特别规定这个条件,但是根据他们的尝试,看起来这就是他们想要的,谢谢。有什么方法可以让成功的结果出现在列表中?比如[facebook.com/profile374]而不是[nan,'facebook.com/profile374',nan,nan]。对于pinterest,这是找不到的,因此结果也是['nan,nan,nan]。如果找不到任何东西,我怎么能生成一个nan?@SCool fb=[I中的“facebook”表示我在mylist中]或者[np.nan]表示如果你想要一个列表,但列表中没有一个条目,请参见Rakesh对此的回答……基本上就是删除else
facebook = [x for x in mylist if 'facebook' in x]
print(facebook)
import numpy as np

mylist = ['linkedin.com/profilexyz','facebook.com/profile374','bbcnews.com/USA_news','stackoverflow.com']
facebook = [x if 'facebook' in x else np.nan for x in mylist]
linkedin = [x if 'linkedin' in x else np.nan for x in mylist]
pinterest = [x if 'pinterest' in x else np.nan for x in mylist]
print(facebook)
print(linkedin)
print(pinterest)
[nan, 'facebook.com/profile374', nan, nan]
['linkedin.com/profilexyz', nan, nan, nan]
[nan, nan, nan, nan]
print(list(set(facebook)))
print(list(set(linkedin)))
print(list(set(pinterest)))
[nan, 'facebook.com/profile374']
[nan, 'linkedin.com/profilexyz']
[nan]
fb = [x if 'facebook' in x else np.nan for x in mylist]
facebook = [(x for x in mylist) if 'facebook' in x else np.nan for x in mylist]
linkedin = [(x for x in mylist) if 'linkedin' in x else np.nan for x in mylist]
pinterest = [(x for x in mylist) if 'pinterest' in x else np.nan for x in mylist]