列表理解和处理空列表;清单清单

时间:2018-08-07 16:42:29

标签: python list-comprehension

我正在尝试执行列表理解。我想用较大列表的值检查较小列表中的值。我认为我的代码有效。直到我的内部列表之一为空。

逻辑很合理...较小列表的位置0没有元素,因此索引错误:

['w', 'c']
    if x[0] != y[0]:
['w', 'c']
IndexError: list index out of range

但是,我想知道什么是写此s / t的正确方法,这里不会出错,而只是假设没有匹配项并移至list_one中的下一个列表?

这是我的代码:

a = [['a', 'b', 'c'], ['w', 'c'], []]
b = [['a', 'b', 'c'], ['a', 'f', 'g'], ['x', 'y', 'z']]


def check_contents(list_one, list_two):

  if len(list_one)<=len(list_two):
    for x in list_one:
      for y in list_two:
        if x[0] != y[0]:
          print(x)
  else:
    for x in list_two:
      for y in list_one:
        if x[0] != y[0]:
          print(x)


check_contents(a, b)

3 个答案:

答案 0 :(得分:2)

尝试一下:

for x, y in zip(list_one, list_two):
    if x and y and x[0] != y[0]:
        print(x)
    else:
        # Rest of the code here

使用zip()函数将创建一个zip对象,以便您可以同时遍历list-onelist-two并比较它们的元素。这也可以解决您的空列表问题。

答案 1 :(得分:2)

首先,您的两个循环执行相同的操作。干(不要重复自己)。其次,要查看列表是否为空,请检查其真值。空列表的值为False

def check_contents(list_one, list_two):
    shorter, longer = sorted([list_one, list_two], key = len)
    for x in longer:
        if not x:
            continue
        for y in shorter:
            if not y:
                continue
            if x[0] != y[0]:
                print(x)

答案 2 :(得分:1)

您可以将条件更改为此:

if x and x[0] != y[0]:

空列表是虚假的,非空列表是真实的,因此,如果x不为空(即x[0] != y[0]存在),则此列表仅计算x[0]