2015-04-05 33 views
-1

比方说例如我有一个称为List1中列表,其还包含其他两个列表(在python即嵌套列表)如何测试,如果在嵌套列表中存在变量,并将其附加到该列表中蟒

的List1 = [ [ 'A'],[ 'B']]

那么我称为列表2

另一个列表列表

列表2 = [ 'A']

我如何通过List1中,然后的值迭代检查List1是否包含List2的值,并将List2中的值附加到List1中的索引0中,其中h appens为[“A”]

这就是我和枚举到目前为止已经试过,但是当我打印列表1我不断获取相同的值[“A”],[“B”]

List1 = [['A'],['B']] 
List2 = ['A'] 

for idx, i in enumerate(List1): 
    if List2 in i: 
     List1.append(idx[i]) 

print(List1) 

我想要得到的结果是[ 'A', 'B'],[ 'B']

编辑:我终于解决了这个问题,并得到了结果,我想

List1 = [['A'],['B']] 
List2 = ['A'] 

for idx, i in enumerate(List1): 
    if List2 in List1: 
     List1[idx].append(List2[idx]) 

print(List1) 
+1

你的第二个'B'从什么时候开始?你的问题似乎意味着会有一个额外的'A',而不是? – Ben 2015-04-05 13:06:46

+0

看看你的变量的类型。 'list2'是一个列表,'i'是一个列表。所以病情从未实现。无论如何,你会在下一行中得到一个TypeError。 – Daniel 2015-04-05 13:17:26

+0

“然后检查List1是否包含List2的值”。你的意思是“List2的值”,或“List2中的值”。因为你在句子的下半部分使用后者,但说第一个(“value”)意味着你想比较完整的列表。 – Evert 2015-04-05 13:21:57

回答

2

而不是只写一些代码,并告诉你如何解决这个问题,我会说,使用python调试器对于向你显示你的代码到底是什么有很大的帮助。

首先,您可以手动添加import pdb; pdb.set_trace()设置代码中的断点如下:

List1 = [['A'],['B']] 
List2 = ['A'] 

import pdb; pdb.set_trace() 
for idx, i in enumerate(List1): 
    if List2 in i: 
     List1.append(idx[i]) 

print(List1) 

现在,运行代码:

$ python /tmp/t.py 
> /tmp/t.py(5)<module>() 
-> for idx, i in enumerate(List1): 
(Pdb) 

您的代码执行到断点并停止。四周看看。在pprint命令显示出变量的内容:

(Pdb) p List1 
[['A'], ['B']] 
(Pdb) p List2 
['A'] 
(Pdb) p List1[0] 
['A'] 
(Pdb) 

OK,一切看起来很不错,到目前为止,现在使用的nnext命令执行到的下一行代码:

(Pdb) n 
> /tmp/t.py(6)<module>() 
-> if List2 in i: 
(Pdb) p idx 
0 
(Pdb) p i 
['A'] 

好的,这看起来像我们所期望的。有时我忘了周围的当前行的代码看起来像,这就是当我使用llist命令:再次

(Pdb) list 
    1  List1 = [['A'],['B']] 
    2  List2 = ['A'] 
    3  
    4  import pdb; pdb.set_trace() 
    5  for idx, i in enumerate(List1): 
    6 ->  if List2 in i: 
    7    List1.append(idx[i]) 
    8  
    9  print(List1) 
[EOF] 

使用n去的下一行代码:

> /tmp/t.py(5)<module>() 
-> for idx, i in enumerate(List1): 
(Pdb) 

它开始于for循环的下一次迭代!你是否期待接下来执行第7行?为什么不呢?

使用qquit退出调试,然后让我们重新开始,并返回到第6行,然后在调试器中计算表达式:

(Pdb) q 
... 
bdb.BdbQuit 
$ python /tmp/t.py 
> /tmp/t.py(5)<module>() 
-> for idx, i in enumerate(List1): 
(Pdb) n 
> /tmp/t.py(6)<module>() 
-> if List2 in i: 
(Pdb) p List2 
['A'] 
(Pdb) p i 
['A'] 
(Pdb) p List2 in i 
False 

这是否令你感到惊讶?你遇到的问题是它正在寻找列表中包含“A”的数组。

(Pdb) p ['A'] in i 
False 

对于是真实的i必须是这样的:

(Pdb) p ['A'] in [['A']] 
True 

你真正想要问是:

(Pdb) p 'A' in i 
True 

我希望帮助您调试代码!

  • 请注意,我不得不修复几个拼写错误来运行您的示例。检查您的代码,确保它在下次发布您的问题之前运行。
+0

谢谢我最初得到了@Daniel说我会得到的Type错误,但是我能够修复它,虽然也很好的工作,以显示我一步一步的过程来调试代码它真的帮助我学习如何调试python代码cuz我不​​知道如何使用eclipse pydev调试器 – danidee 2015-04-06 20:34:47

+0

@danidee,使用调试器是一项非常有价值的技能,欢迎来到下一个级别! – ericzundel 2015-04-07 12:22:22

相关问题