python中的列表识别中的列表
我编写这段简单的代码是为了了解列表中的成员是否是列表本身,如果是,则打印成员。我很想知道这是否是正确的方法:python中的列表识别中的列表,python,list,Python,List,我编写这段简单的代码是为了了解列表中的成员是否是列表本身,如果是,则打印成员。我很想知道这是否是正确的方法: listt = ['spam!', 1, ['B', 'R', 'P'], [1 , 2, 3]] leng= range(len(listt)) def listPrint(listt, leng): for i in leng: print "List member",i,":" list1 = listt[i] print
listt = ['spam!', 1, ['B', 'R', 'P'], [1 , 2, 3]]
leng= range(len(listt))
def listPrint(listt, leng):
for i in leng:
print "List member",i,":"
list1 = listt[i]
print listt[i]
if isinstance(listt[i], list):
leng2 = range(len(listt[i]))
print 'and the members are:'
for e in leng2:
print list1[e], '\n'
else:
print '\n'
listPrint(listt,leng)
Python的for循环实际上以与其他语言中的
foreach
循环相同的方式遍历项目。这与Python内置的type()
函数配合使用,可以真正简化流程
def listPrint(listt):
i=0 #for counting the members of the list
for elem in listt: #Now you can use each element directly
print "List member",i,":"
print elem
if type(elem) is list:
print " and the members are: "
for thing in elem:
print thing
print '\n'
i+=1
编辑:
下面是一个使用isinstance()
的版本,如果您希望使用它的话。我总是使用type()
来处理这类事情,所以这是我的第一个想法,但我想我应该首先将您使用的东西合并到一起
def listPrint(listt):
i=0 #for counting the members of the list
for elem in listt: #Now you can use each element directly
print "List member",i,":"
print elem
if isinstance(elem, list):
print " and the members are: "
for thing in elem:
print thing
print '\n'
i+=1
以下是一个更简洁的版本,其中包含一些在线评论:
def list_print(lst): # PEP-8 function name
"""Print the list, including sub-lists, item by item.""" # docstring
for index, item in enumerate(lst): # use enumerate to get item and index
print "List member {0}: ".format(index) # use str.format to create output
print repr(item) # repr gives e.g. quotes around strings
if isinstance(item, list):
print "and the members are:"
for subitem in item: # iterate directly over list
print repr(subitem)
print "" # blank line between items
请注意:
- 包括文档,特别是当您的函数做了一些令人惊讶的事情时(比如期望
是一个范围,而不仅仅是整数长度)李>leng
- Python包含了大量的迭代功能,
很少是正确的答案:对于范围内的i(len(…)
- ,并且对于x in y而言,普通的旧
更易于阅读和使用李>
- 至少,您应该在函数中移动
,不要传递从同一对象获得的两条信息;及range(len(listt))
- 至少,您应该在函数中移动
- ,并且对于x in y而言,普通的旧
- 与将多个参数传递到
相比,使用更简洁、更具python风格print
>>> list_print(['spam!', 1, ['B', 'R', 'P'], [1 , 2, 3]])
List member 0:
'spam!'
List member 1:
1
List member 2:
['B', 'R', 'P']
and the members are:
'B'
'R'
'P'
List member 3:
[1, 2, 3]
and the members are:
1
2
3
为什么要使用
范围()
?只需对列表中的元素使用,并直接使用elem
;它有用吗?如果是这样的话,这可能更适合于。是另一个问题的替代实现。如果all(list1中x的isinstance(x,list)
可能更好。是的,我已经测试过它的工作原理。Martjin Pieters,如果我不使用range,那么在函数内部当我说:print listt[i]它说我应该是整数isinstance
很好-比type
更好,因为它处理继承-您应该真正测试相等(==
)而不是标识(是
)。对于type(),它真的有什么区别吗?它工作得很好。对于我的两个观点-您当前的代码将工作,但可能会更好。对不起,“工作”是一个错误的词。我的意思是它实际上会影响代码的性能吗?isinstance()和type()在这种基本情况下应该可以互换,在这种情况下比较恒等式和相等性并不重要,因为它们的计算结果都是真的。在这种情况下,是什么让身份比平等更糟糕?在这种情况下不是<代码>类型
在这里可以使用,但是既然OP已经有了更好的东西,为什么还要使用它呢<代码>列表等都是单件的,所以是
是正确的-很抱歉。我明白你的意思。你说的“Pythonic”是指更多的“面向对象”吗?我想我需要时间来消化所有这些:)@Sasan-see例如,我浏览了您使用的内置函数。确实非常有用!但由于我对编码非常陌生,我宁愿尝试编写代码而不使用函数一次,然后在我理解了逻辑之后,我使用函数来简化代码!你同意吗?@Sasan这取决于你,但是丰富的标准库是python的一个主要优点,你应该掌握它