附加true或false的函数无法正常工作

问题描述 投票:1回答:2

我列出一个清单:

nest_list = [['John like to play football'],['He likes Liverpool'],
             ['His favourite player is Salah'],['He would like to play as striker'],
             [],['James like to play F1'],['He likes Ferrari'],
             ['His favourite driver is Raikkonnen'],[],
             ['Stefani like to play basketball'],['She likes Chicago Bulls'],
             ['His favourite player is Micheal Jordan']]

我想找到空列表的位置并迭代它们以获取有关每个人的信息并将其存储为数据帧。例如:

Row 1: John Football Liverpool Salah Striker

Row 2: James F1 Ferrari Raikkonen Driver

Column: John James etc

为此,我尝试了当列表长度为0时保存列表True的函数,否则为False

然后我使用itertools.compress打印选择器为True的项目。

zip_nest_list = list(zip(range(len(nest_list)),nest_list))
import itertools

selectors = []
def is_empty(i):
    '''Create selectors list with True when empty list and false when not empty'''
    if len(zip_nest_list[i][1]) == 0:
        selectors.append(True)
    selectors.append(False)

for x in range(len(zip_nest_list)):
    is_empty(x)


result = itertools.compress(zip_nest_list,selectors)
#printing empty lists with number
for item in result:
    print(item)

问题是选择器有更多的元素,然后我预期(14而不是12)。在True和下一个True之间,我有4次False,但应该是第二次False后3次和一次额外的True

为什么这样以及如何修复它?有没有更快/更好的方法来解决整个问题?

python python-3.x itertools
2个回答
2
投票

你在else声明中忘记了if条款;无论如何,False附加到selectors。它应该是:

if len(zip_nest_list[i][1]) == 0:
    selectors.append(True)
else:
    selectors.append(False)

1
投票

问题是缺少else: - 请参阅hiro's answer - 它总是附加False


Zen of python: #3 - 简单比复杂更好。

你根本不需要itertools.compress

zip_nest_list = list(zip(range(len(nest_list)),nest_list))

是相同的:

zip_nest_list = list(enumerate(nest_list))

要获取空列表的索引,您可以使用list comprehension

empties = [ x for x in enumerate(nest_list) if not x[1]] # empty list is Falsy

print( *empties, sep="\n")

输出:

(4, [])
(8, [])

质地:

© www.soinside.com 2019 - 2024. All rights reserved.