python 多行列表输出和排序

python multiline list output and sorting

一个查询产生多行答案,并非所有行都有 output/result,并且会产生一个空行 []

我要

  1. 当任何一行有结果要显示时忽略所有其他空行[案例 1]
  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 变体,但没有成功

案例一 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)

如果我对你的问题理解正确,你可以简单地使用一个标志来指示是否有任何结果。如果旗帜升起,则只会打印结果。否则,将打印“no f found”:

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")