Python 列表中的if/else

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] 并且,对

如何在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]
    
    并且,对于仅具有
    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]
    阿菲查