Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的列表识别中的列表_Python_List - Fatal编程技术网

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
请注意:

    Python有,你应该阅读并至少考虑以下内容:<李>
  • 包括文档,特别是当您的函数做了一些令人惊讶的事情时(比如期望
    leng
    是一个范围,而不仅仅是整数长度)
  • Python包含了大量的迭代功能,
    对于范围内的i(len(…)
    很少是正确的答案:
    • ,并且对于x in y而言,普通的旧
      更易于阅读和使用
      
    • 至少,您应该在函数中移动
      range(len(listt))
      ,不要传递从同一对象获得的两条信息;及
  • 与将多个参数传递到
    print
    相比,使用更简洁、更具python风格
使用中:

>>> 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的一个主要优点,你应该掌握它