【问题标题】:Query with list comphrehension使用列表理解进行查询
【发布时间】:2021-11-26 19:35:13
【问题描述】:

我的列表看起来像,

tmp_text = ['col1','','col2','col3','','']

我正在尝试用迭代值替换列表中的空元素,这是我想要得到的输出

tmp_text = ['col1','Nan1','col2','col3','Nan2','Nan3']

基本上我需要将空元素替换为字符串“NaN”,但附加一个迭代数字。我需要一些有关如何执行此操作的帮助。

【问题讨论】:

  • 当然可以

标签: python python-3.x list loops list-comprehension


【解决方案1】:

我已经举了一个例子来执行这个。这里对于每个空元素,我们必须将其替换为“Nan”+空元素的数量。所以让我们取一个 i=1 的变量,因为第一个替换是“Nan1”。我们可以设置 if 条件,如果元素为空,则将其替换为 "Nan"+str(i) ,我每次都必须更新。尝试这样做:

l=['s','','d','','ht']
i=1
for j in range (len(l)):
    if l[j]=='':
        l[j]='Nan'+str(i)
        i+=1
    
print(l)

【讨论】:

    【解决方案2】:

    但是,为什么您需要在列表理解上执行此操作?每次迭代都需要依赖一个将有条件更新的变量。

    但是,如果您像这样使用 python 3.8+,仍然有办法

    [x or f"Nan{(y := y + 1)}" for index, x in enumerate(tmp_text) if not index and (y := 0) or True]
    

    会给你

    ['col1', 'Nan1', 'col2', 'col3', 'Nan2', 'Nan3']
    

    我强烈建议不要这样做,因为它不是真正可读的,并且有一个可疑的逻辑检查只是为了通过海象初始化一个变量

    【讨论】:

    • 输出应该是['col1','Nan1','col2','col3','Nan2','Nan3']。再次检查你的。
    • 谢谢@ruohola,这是对NaNNan 的一个很好的了解,但是它应该输出。我已经更新了 f-string 中的部分
    【解决方案3】:

    在 python 3.8+ 中使用assignment/walrus 运算符,您可以轻松完成此操作

    tmp_text = ['col1','','col2','col3','','']
    
    i = 0
    result = [x or f'Nan{(i:=i+1)}' for x in tmp_text]
    

    ['col1', 'Nan1', 'col2', 'col3', 'Nan2', 'Nan3']
    

    【讨论】:

      【解决方案4】:

      这是你可以做到的一种方法

      from itertools import counter
      nan_counter = counter(1)
      
      tmp_txt = [s if s else f'NaN{next(nan_counter)}' for s in tmp_txt]
      

      【讨论】:

        【解决方案5】:

        您可以使用itertools.count(),它返回一个数字迭代器:

        >>> import itertools
        >>> tmp_text = ['col1','','col2','col3','','']
        >>> counter = itertools.count(1)
        >>> new_text = [x or f'Nan{next(counter)}' for x in tmp_text]
        ['col1', 'Nan1', 'col2', 'col3', 'Nan2', 'Nan3']
        

        【讨论】:

          猜你喜欢
          • 2020-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-18
          相关资源
          最近更新 更多