【问题标题】:python multiline list output and sortingpython多行列表输出和排序
【发布时间】:2020-08-27 22:03:17
【问题描述】:

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

我想要

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

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

只提供第一个需求的代码的 sn-p

    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

如果有人能帮帮我,我将不胜感激

【问题讨论】:

    标签: python list python-3.7 any


    【解决方案1】:

    你可以通过引入一个变量来轻松解决这个问题,发现:

    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 no f found no f found no f found no f found
    • 这是不可能的——在我的例子中,'no f found' 打印在 'for' 循环之外,它只能输出一次。
    • 我想我现在明白了 - 我有另一个 def,当我将 not found 移到主 def 之外时,它起作用了,非常感谢
    【解决方案2】:

    如果我正确理解了您的问题,您可以简单地使用一个标志来指示是否有任何结果。如果升起标志,则仅打印结果。否则,将打印“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")
    

    【讨论】:

    • 问题仍然是它为每一行提供输出,所以没有找到 f 的 4 行而不是单行
    • 谢谢,我不得不将标志移到当前的 def 之外,它奏效了 - 干杯
    猜你喜欢
    • 2011-12-07
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多