【问题标题】:ClearWhiteSpace, Need to check if the value is equal to [] [duplicate]ClearWhiteSpace,需要检查值是否等于[] [重复]
【发布时间】:2012-06-14 00:03:13
【问题描述】:

可能重复:
How do you check if list is blank?

def CleanWhiteSpace(theDict) :
    stuff=[]

    for key,value in theDict.items():
        for d in value:
            if value != " ":
                stuff.append(d)    
                print d
                theDict[key]=stuff
            if not value[d]:
                print value
        stuff=[]
    return theDict
print CleanWhiteSpace({'a':['1','2'],'b':['3',' '],'c':[]})

你如何检查 c 是否为空白 c 是否等于 []?

好的,我有一个字典,里面有列表,其中一些列表是由 NOTHING 组成的。我需要遍历字典并删除那些具有 AN EMPTY LIST 值的键。

尽量清楚。我试过什么?我尝试了多种不同的方法来检查键的值是否等于空。我尝试了 value == "": 语句,我尝试了 len 函数来检查 value 是否为空,我尝试了 if value: nothing 似乎工作,为什么?因为正如有人回答的那样,空列表不会在循环体中执行

【问题讨论】:

  • 我们不就是有这个问题吗,还是这不一样?
  • 我们解决了最后一个问题,这是最后一个问题,但它有一个新问题
  • @ChinmayKanchi 不,我摆脱了那个问题,但是一些名叫 sven 的家伙正试图回滚它,只是为了让它成为可能的重复。我问了一个问题,然后当它解决后,将其编辑为其他内容。然后再次编辑并创建了一个新问题。有人不断地将这两个问题滚动到相同的程度,只是为了让我陷入困境。问题的原件都不同。
  • 如果明确 (1) 你的意思是什么,例如“我试过 ==[]”,(2 )当你尝试这样做时发生了什么,以及(3)你想要发生的事情是不同的。 (你的CleanWhiteSpace 函数实际上应该做什么?)
  • 我认为任何人都不太可能做任何事情“只是为了让你陷入困境”(他们到底为什么会这样做?)。实际上似乎发生的是,您的问题已关闭,并且您试图用愤怒的消息删除其文本。不要那样做。它没有生产力。

标签: python


【解决方案1】:

在您的示例中,当处理键 c 时,key 的值将是 'c'value 的值将是 [],这是一个空列表。您可以通过说例如if not value: 来测试这一点。或者,如果您知道它是一个列表而不是其他类型的序列,if value==[]

很难从所写的问题中确定,但您是否尝试过将if d==[]: 之类的内容放在循环中的某个位置?那是行不通的,因为当value 是一个空列表时,循环for d in value: 正在循环一个空列表的元素,并且没有任何元素,所以循环体永远不会被执行。

顺便说一句,您的代码的其他一些部分似乎在 value 及其元素之间显示出混淆。例如,您写 if value != " " 但肯定是 d 您想在那里进行测试。 if not value[d]: 是怎么回事?为什么你会认为 d 是一个适合索引 value 的东西?

您还应该更仔细地考虑一下代码执行时stuff 会发生什么。

【讨论】:

  • 叹息。感谢您解释为什么它不起作用。那么你如何让它工作呢?你如何从数组中的字典中删除一个空列表?
  • 我不会为你编写代码,而且很可能其他人也不会;这不是堆栈溢出的工作方式。 (除此之外,据我们所知,这是某种家庭作业,为您解决它会使您更难学习。)您需要更具体地了解您想知道的内容。
  • 顺便提一下,我和钦梅都确实说过如何正确地做到这一点:检查列表是否为空的常用方法是说类似if not value:。如果由于某种原因这对您不起作用,向我们展示它是如何失败的,然后也许我们可以提供进一步的帮助。
  • 我同意加雷斯的观点。 “他们在我拥有的这个特定的 sn-p 中不起作用”没有帮助。我们无法修复不存在的代码。
  • 哪一部分令人困惑? gareth 说,由于变量值是空的,所以空性不会通过主循环被拉出。如何从字典中删除空列表?你们需要我解释什么? {'a': ['1', '2'], 'c': [], 'b': ['3', ' ']} 这是失败的原因。键 c 的值为“[]”。密钥 c 不应该存在。并且代码已经写好了。它只是不起作用
【解决方案2】:

编辑:

这个怎么样?

def CleanWhiteSpace(theDict):
    newDict = {}
    for key in theDict:
        if theDict[key]:
            newDict[key] = theDict[key]
    return newDict

请注意,这可以避免在原地修改 theDict,所以如果您需要,请询问。

有两种方法可以检查列表是否为空:

a_list = []
if not a_list:
    do something #the if is entered if the list is blank

或者

a_list = []
if len(a_list)==0:
    do something

这两个 sn-ps 是等价的。请注意,第一个有效,因为a_list 的值被隐式转换为布尔值,而bool([])False

【讨论】:

  • 它们在我拥有的这个特定的 sn-p 中不起作用,我不知道为什么
  • 您在代码中的哪个位置测试空列表?向我们展示该代码。
  • 一切都在那里。代码正在执行打印语句 print CleanWhiteSpace({'a':['1','2'],'b':['3',' '],'c':[]})
  • 好的..这如何删除空格?一切都很好,我还是找到了解决方案 +1
【解决方案3】:
theDict = dict( [(k,v) for k,v in theDict.items() if len(v)>0])

【讨论】:

  • 将其更改为 theDict = dict( [(k,v) for k,v in theDict.items() if v)。它更像 Pythonic。
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2012-09-21
  • 2021-12-16
相关资源
最近更新 更多