2016-09-06 21 views
1

的名单这里是我的(名单)名单:嵌套if语句返回没有在名单

mylist = [ [1, "John", None, "Doe"], [2, "Jane", "group1", "Zee"], [3, "Lex", "group2", "Fee"]] 

y = 2 

for sublist in mylist: 
    if sublist[0] == y: # meaning the third list 
     if sublist[2] == None: 
      print(sublist[2]) # this should print nothing 
     else: 
      print(sublist[2]) #this should print something 

最终的结果是,此代码不能打印任何内容。

我试图做的,我有我的(列表)列表中None值的情况进行检查。上面的这个方法似乎不起作用。

我想不通为什么它拒绝停止打印任何东西,但我相信嵌套if sublist[2] == None:可能有一些用它做。

+6

这会在我的机器上打印“group1”。使用python 3.4。 –

+3

'sublist [0] == y',因为'y = 2',* second *列表将为真。 –

+1

我使用python 2.7,你的代码打印'group1' –

回答

4

我试图做的,我在我的(名单)

名单有没有价值然后,只需检查会员与in对每个子列表的情况进行检查:

for sublist in mylist: 
    if None in sublist: 
     # do your check 
     print("None in list: ", sublist) 

打印:

None in list: [1, 'John', None, 'Doe'] 

如果你想只看到如果存在于一般None只需使用any

any(None in sub for sub in mylist) 

返回True因为Nonemylist[0]

+0

谢谢你的回答。 – coolpy

2

我想我明白你要完成的任务。 你想通过列表的列表枚举,然后检查y个场,看看它是否包含None

你所面临的问题是,当你这样做:

y = 2 

指示第三场,以后你做:

if sublist[0] == y: 

,那么你检查是否第一场(指示通过[0])的sublist等于2

它带来你到第三个子列表,而不是子列表枚举中的第三个字段。这是你的代码出错的地方。

你需要完全删除该if sublist[0] == y:,并简单地检查sublist[y]

下面的代码将枚举你的列表清单,然后检查y个场为None

mylist = [ [1, "John", None, "Doe"], [2, "Jane", "group1", "Zee"], [3, "Lex", "group2", "Fee"]] 

y = 2 

for sublist in mylist: 
    if sublist[y] == None: 
     print(sublist[y]) # this should print nothing 
    else: 
     print(sublist[y]) #this should print something 

如果你想检查任何字段包含None,你得到这样的事情:

mylist = [ [1, "John", None, "Doe"], [2, "Jane", "group1", "Zee"], [3, "Lex", "group2", "Fee"]] 

for sublist in mylist: 
    for field in sublist: 
     if field == None: 
      print("None detected in: " + str(sublist)) 
+0

感谢您的回答和详细解释。我会给你一个赞成票,但有人给我一个downvote,我的声望再次低于15。 – coolpy

+0

@coolpy感谢您的反馈,祝您好运。你总是可以尝试“标记为答案”:-) –