【问题标题】:'NoneType' object is not iterable?“NoneType”对象不可迭代?
【发布时间】:2020-05-06 06:09:58
【问题描述】:
def merge_list(list1,list2):

    res_list=[]
    list2=list2.reverse()
    conv = lambda i : i or '' 
    res = [conv(i) for i in list2] 
    for i in range(0,len(list1)):
        res_list.append(list1[i]+list2[i])
        merged_data=' '.join(res_list)
    return merged_data
list1 = ['A', 'app', 'a', 'd','ke','th','doc','awa']
list2=['y','tor','e','eps','ay',None,'le','n']
data=merge_list(list1,list2)
data

我正在尝试反转 list2 并将两个列表中的字符串连接起来以获得一个字符串作为结果。目标是忽略列表中的None(如果有),并打印最后一句。

【问题讨论】:

  • 忽略None是什么意思?

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


【解决方案1】:

1) 替换两个列表中的None

>>> list1 = [x if x else "" for x in list1]
>>> list2 = [x if x else "" for x in list2]

2) 压缩和迭代:

>>> lis=[]
>>> for x,y in zip(list1,list2[::-1]):
...     lis.append(x+y)

3) 加入:

>>> " ".join(lis)
'An apple a day keeps the doctor away'

CDJB 的一个班轮结合了所有这些步骤

【讨论】:

    【解决方案2】:

    错误是你用过

    list2=list2.reverse()
    

    list.reverse() 方法将列表反转,该方法本身返回None。要解决此问题,请将行更改为只读:

    list2.reverse()
    

    你也用过

    res_list.append(list1[i]+list2[i])
    

    这应该是这样的

    res_list.append(list1[i]+res[i])
    

    这些更正给出了输出:

    'An apple a day keeps the doctor away'
    

    解决此问题的另一种方法是单行,使用zip,使用列表切片反转list2,以及应用None -> '' 逻辑的三元语句。

    >>> list1 = ['A', 'app', 'a', 'd', 'ke', 'th', 'doc', 'awa']
    >>> list2 = ['y', 'tor', 'e', 'eps', 'ay', None, 'le', 'n']
    >>> ' '.join(''.join(y if y else '' for y in x) for x in zip(list1, list2[::-1]))
    'An apple a day keeps the doctor away'
    

    【讨论】:

      猜你喜欢
      • 2016-02-08
      • 1970-01-01
      • 2013-12-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多