我有一个包含字符串和None值的列表xs。如何使用列表理解来调用每个字符串上的函数,但将None值转换为“”(而不是将它们传递给函数)?
我尝试了:
[f(x) for x in xs if x is not None else '']
但它给出了SyntaxError。正确的语法是什么?
如果您试图创建一个省略基于条件的值的列表理解,请参阅带条件的列表理解。
如果需要考虑两个以上的条件结果,请注意Python的条件表达式不支持elif。相反,需要嵌套if/else条件。有关详细信息,请参见列表理解条件中的“elif”。
这与如何理解列表有关。
请记住以下几点:
[ expression for item in list if conditional ]
相当于:
for item in list:
if conditional:
expression
如果表达式的格式稍有不同(请考虑在句子中切换主语和动词的顺序)。
因此,您的代码[x+1 for x in l if x>=45]执行以下操作:
for x in l:
if x >= 45:
x+1
然而,此代码[x+1 if x>=45 else x+5 for x in l]执行此操作(重新排列表达式后):
for x in l:
if x>=45: x+1
else: x+5
你可以在理解中结合条件逻辑:
ps = PorterStemmer()
stop_words_english = stopwords.words('english')
best = sorted(word_scores.items(), key=lambda x: x[1], reverse=True)[:10000]
bestwords = set([w for w, s in best])
def best_word_feats(words):
return dict([(word, True) for word in words if word in bestwords])
# with stemmer
def best_word_feats_stem(words):
return dict([(ps.stem(word), True) for word in words if word in bestwords])
# with stemmer and not stopwords
def best_word_feats_stem_stop(words):
return dict([(ps.stem(word), True) for word in words if word in bestwords and word not in stop_words_english])
# coding=utf-8
def my_function_get_list():
my_list = [0, 1, 2, 3, 4, 5]
# You may use map() to convert each item in the list to a string,
# and then join them to print my_list
print("Affichage de my_list [{0}]".format(', '.join(map(str, my_list))))
return my_list
my_result_list = [
(
number_in_my_list + 4, # Condition is False : append number_in_my_list + 4 in my_result_list
number_in_my_list * 2 # Condition is True : append number_in_my_list * 2 in my_result_list
)
[number_in_my_list % 2 == 0] # [Condition] If the number in my list is even
for number_in_my_list in my_function_get_list() # For each number in my list
]
print("Affichage de my_result_list [{0}]".format(', '.join(map(str, my_result_list))))
(venv)$python list_comp.py我的联系列表[0,1,2,3,4,5]我的联系结果列表[0,5,4,7,8,9]
因此,对于您:row=[(“”,unicode(x.strip()))[x不是None](对于行中的x)]
这与如何理解列表有关。
请记住以下几点:
[ expression for item in list if conditional ]
相当于:
for item in list:
if conditional:
expression
如果表达式的格式稍有不同(请考虑在句子中切换主语和动词的顺序)。
因此,您的代码[x+1 for x in l if x>=45]执行以下操作:
for x in l:
if x >= 45:
x+1
然而,此代码[x+1 if x>=45 else x+5 for x in l]执行此操作(重新排列表达式后):
for x in l:
if x>=45: x+1
else: x+5
从可迭代的
最好先概括所有可能的形式,而不是给出问题的具体答案。否则,读者将不知道答案是如何确定的。下面是我在决定最后一个形式中是否可以使用final else子句之前想出的几个通用形式。
[expression1(item) for item in iterable]
[expression1(item) if conditional1 for item in iterable]
[expression1(item) if conditional1 else expression2(item) for item in iterable]
[expression1(item) if conditional1 else expression2(item) for item in iterable if conditional2]
item的值不需要在任何条件子句中使用。conditional3可以用作向输出列表添加或不添加值的开关。
例如,要创建一个新列表,从原始字符串列表中删除空字符串或空白字符串:
newlist = [s for s in firstlist if s.strip()]