python多行列表输出和排序

问题描述

查询产生多行答案,但并非总是所有行都有任何输出/结果,并且会产生空行[]

我想

  1. 当有任何行要显示的结果时,忽略所有其他空行[案例1]
  2. 如果所有行为空,则打印出一条消息。 [案例2]

我用循环语句if & elseall()any()尝试了许多选项,但是我最好的选择是仅满足第一个要求- 我是无法获得所有空的第二个要求

仅满足第一个要求的代码

    f = query(data)
    for x in f:
        if x:
            print(x)
        else:
            if all(x):
               print("no f found")

此外,我尝试了any()all()及其not的变体,都没有运气

案例1 f查询输出,当有结果时,[在这种情况下,只有4个结果中有2个]

['p=SDVjXSERgCziEsyhT4dIySuh9ha5Udt5b9F5TATeJ']
[]
['p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC31']
[]

期望输出

p=SDVjXSERgCziEsyhT4dIySuh9ha5Udt5b9F5TATeJ
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC31

案例2,f查询输出,当根本没有结果时

[]
[]
[]
[]

期望输出

no f found

**我不想要的是为空的每一行获取一个** no f found

p=SDVjXSERgCziEsyhT4dIySuh9ha5Udt5b9F5TATeJ
no f found
p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC31
no f found

no f found
no f found
no f found
no f found

如果有人可以帮助我,我将非常感谢

解决方法

您可以通过引入以下变量来轻松解决此问题:

found = False
f = query(data)
for x in f:
    if x:
        print(x)
        found = True

if not found:
    print("no f found")

'if not any(f)'也可以工作,但是在第一次遍历列表时最好使用类似的变量,这样您就无需再使用any()就可以获取信息。

使用any(),这可能是一个不错的方法:

f = query(data)
if not any(f):
    print("no f found")
else:
    for x in f:
        if x:
            print(x)
,

如果我正确理解了您的问题,则只需使用一个标志来指示是否有任何结果。如果标记升高,则仅打印结果。否则,将显示“找不到f”:

array = [['p=SDVjXSERgCziEsyhT4dIySuh9ha5Udt5b9F5TATeJ'],[],['p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC31'],[]]

flag_some = False
for a in array:
      if a:
            print(a)
            flag_some = True

if not flag_some:
      print("no f found")