【问题标题】:List question in Python在 Python 中列出问题
【发布时间】:2011-10-13 11:44:11
【问题描述】:

好的,所以我有一个包含 296 个数据点和四个空格的列表。我无法编辑此数据点列表。我有另一个 300 个数据点的列表。我想将列表相乘,当出现空白时,python 跳过将数据点相乘。列表如下所示:

a = [[6], [7], [], [7]]
b = [[100], [200], [300], [400]]

我必须进行什么样的异常处理?我当前的代码使用

for items in mathList:
  try:
      sumlist = [x * y for x,y in zip(grearp, rex)]
  except:
      print 'No data for',items

【问题讨论】:

    标签: python list exception exception-handling


    【解决方案1】:

    那么两个列表的长度实际上是 300,缺少的数据点是 0 还是空白字符串?如果是这样,这应该接近:

    newList = [x[0] * y[0] if x else None for x, y in zip(l1, l2)]
    

    -- 已编辑--

    我意识到我没有尽我所能地查看样本数据。由于内部列表是空的,它自己会通过真值测试,所以只需if x。此外,为 x、y 上的内部列表添加了索引。

    【讨论】:

    • 这行不通,因为他有列表列表,而不是整数列表。
    • 没关系,我刚刚删除了迷你列表,这很有效。感谢您的帮助!
    • @miles82 -> 你是对的。我稍微修改了代码。但事实上,有时它更多的是展示一种方法,而不是提供复制/粘贴解决方案。问题归结为“我如何有条件地在列表推导中操作”,这两个版本的代码都演示了。
    • @Tim - 乐于助人!我很高兴这是有道理的。 :)
    【解决方案2】:

    认为您也可以使用类似的东西(下面的代码将准备列表大小相同,然后如果两个值都存在则计算“*” - 否则包括唯一存在的值):

    from itertools import izip_longest
    
    a = [[6], [7], [], [7]]
    b = [[100], [200], [300], [400]]
    
    newList = [[x[0] * y[0]] if x and y else (x or y) for x,y in izip_longest(a,b, fillvalue=[])]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2017-09-19
      • 2021-06-11
      • 2019-12-21
      • 1970-01-01
      相关资源
      最近更新 更多