Python 列表中的if/else
如何在Python中执行以下操作Python 列表中的if/else,python,list-comprehension,Python,List Comprehension,如何在Python中执行以下操作 row = [unicode(x.strip()) for x in row if x is not None else ''] 基本上: 用空字符串替换所有Nones,然后 执行一项功能 你完全可以做到。这只是一个订购问题: [unicode(x.strip()) if x is not None else '' for x in row] 总的来说 [f(x) if condition else g(x) for x in sequence] 并且,对
row = [unicode(x.strip()) for x in row if x is not None else '']
基本上:
你完全可以做到。这只是一个订购问题:
[unicode(x.strip()) if x is not None else '' for x in row]
总的来说
[f(x) if condition else g(x) for x in sequence]
并且,对于仅具有if
条件的列表理解
[f(x) for x in sequence if condition]
请注意,这实际上使用了不同的语言构造a,a本身不是的一部分,而if
后面的for…in
是列表理解的一部分,用于从源iterable中筛选元素
条件表达式可以在各种情况下使用,您需要根据某些条件在两个表达式值之间进行选择。这样做的效果与。例如:
value = 123
print(value, 'is', 'even' if value % 2 == 0 else 'odd')
你完全可以做到。这只是一个订购问题:
[unicode(x.strip()) if x is not None else '' for x in row]
总的来说
[f(x) if condition else g(x) for x in sequence]
并且,对于仅具有if
条件的列表理解
[f(x) for x in sequence if condition]
请注意,这实际上使用了不同的语言构造a,a本身不是的一部分,而if
后面的for…in
是列表理解的一部分,用于从源iterable中筛选元素
条件表达式可以在各种情况下使用,您需要根据某些条件在两个表达式值之间进行选择。这样做的效果与。例如:
value = 123
print(value, 'is', 'even' if value % 2 == 0 else 'odd')
单向:
def change(f):
if f is None:
return unicode(f.strip())
else:
return ''
row = [change(x) for x in row]
尽管你有:
row = map(change, row)
或者您可以使用lambda内联。单向:
def change(f):
if f is None:
return unicode(f.strip())
else:
return ''
row = [change(x) for x in row]
尽管你有:
row = map(change, row)
或者您可以使用lambda内联。这里是另一个示例:
>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!")
Ha, ha, ha!
它利用了这样一个事实:对于0
,如果i的计算结果为False
,对于函数range()
生成的所有其他值,则为True
。因此,列表理解评估如下:
>>> ["ha" if i else "Ha" for i in range(3)]
['Ha', 'ha', 'ha']
下面是另一个示例:
>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!")
Ha, ha, ha!
它利用了这样一个事实:对于0
,如果i的计算结果为False
,对于函数range()
生成的所有其他值,则为True
。因此,列表理解评估如下:
>>> ["ha" if i else "Ha" for i in range(3)]
['Ha', 'ha', 'ha']
具体的问题在前面的回答中已经解决了,所以我将讨论在列表理解中使用条件句的一般想法 下面是一个示例,说明如何在列表中编写条件:
X = [1.5, 2.3, 4.4, 5.4, 'n', 1.5, 5.1, 'a'] # Original list
# Extract non-strings from X to new list
X_non_str = [el for el in X if not isinstance(el, str)] # When using only 'if', put 'for' in the beginning
# Change all strings in X to 'b', preserve everything else as is
X_str_changed = ['b' if isinstance(el, str) else el for el in X] # When using 'if' and 'else', put 'for' in the end
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])
请注意,在X_non_str
的第一个列表理解中,顺序为:
在iterableif条件下项的表达式
在上一个列表中,X_str__changed
,顺序是:
表达式1如果条件其他表达式2对于中的项
我总是很难记住,expression1必须在if之前,expression2必须在else之后。我的脑袋想两者都在之前或之后
我猜它是这样设计的,因为它类似于正常的语言,例如,“如果下雨,我想呆在屋里,否则我想出去”
用通俗易懂的英语上述两种列表理解可以表述为:
仅在以下情况下使用:
如果
苹果成熟,则在苹果盒中为苹果提取苹果
并使用if/else
如果苹果已成熟,则标记苹果,否则将苹果置于苹果框中,不标记苹果
具体的问题在前面的回答中已经解决了,所以我将讨论在列表理解中使用条件句的一般想法 下面是一个示例,说明如何在列表中编写条件:
X = [1.5, 2.3, 4.4, 5.4, 'n', 1.5, 5.1, 'a'] # Original list
# Extract non-strings from X to new list
X_non_str = [el for el in X if not isinstance(el, str)] # When using only 'if', put 'for' in the beginning
# Change all strings in X to 'b', preserve everything else as is
X_str_changed = ['b' if isinstance(el, str) else el for el in X] # When using 'if' and 'else', put 'for' in the end
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])
请注意,在X_non_str
的第一个列表理解中,顺序为:
在iterableif条件下项的表达式
在上一个列表中,X_str__changed
,顺序是:
表达式1如果条件其他表达式2对于中的项
我总是很难记住,expression1必须在if之前,expression2必须在else之后。我的脑袋想两者都在之前或之后
我猜它是这样设计的,因为它类似于正常的语言,例如,“如果下雨,我想呆在屋里,否则我想出去”
用通俗易懂的英语上述两种列表理解可以表述为:
仅在以下情况下使用:
如果
苹果成熟,则在苹果盒中为苹果提取苹果
并使用if/else
如果苹果已成熟,则标记苹果,否则将苹果置于苹果框中,不标记苹果
其他解决方案对于单个
if
/else
构造非常有用。然而,列表理解中的三元语句可能很难阅读
使用函数有助于可读性,但在映射为输入的工作流中,这种解决方案很难扩展或适应。词典可以缓解这些担忧:
row = [None, 'This', 'is', 'a', 'filler', 'test', 'string', None]
d = {None: '', 'filler': 'manipulated'}
res = [d.get(x, x) for x in row]
print(res)
['', 'This', 'is', 'a', 'manipulated', 'test', 'string', '']
其他解决方案对于单个
if
/else
构造非常有用。然而,列表理解中的三元语句可能很难阅读
使用函数有助于可读性,但在映射为输入的工作流中,这种解决方案很难扩展或适应。词典可以缓解这些担忧:
row = [None, 'This', 'is', 'a', 'filler', 'test', 'string', None]
d = {None: '', 'filler': 'manipulated'}
res = [d.get(x, x) for x in row]
print(res)
['', 'This', 'is', 'a', 'manipulated', 'test', 'string', '']
(venv)$python列表\u comp.py附加我的清单[0,1,2,3,4,5]
阿菲查