如何迭代列表的元组?

2024-09-30 05:18:20 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,这可能是一个愚蠢的一个,但我现在有点卡住了。 我正在处理tuple类型的参数,包含列表列表,只是不能正确地读取它们。你知道吗

下面是一个基本示例:

def test(*args):
    for arg in args:
        print(arg)
        print(arg[0])
        print(arg[1])

testTuple1 = ([["x_1", "x_2", "x_3"], []])
testTuple2 = ([['x_1', 'x_2', 'x_3'], []], [['x_2', 'x_3'], ['x_1']])

test(testTuple1)
test(testTuple2)

其结果如下:

[['x_1', 'x_2', 'x_3'], []]
['x_1', 'x_2', 'x_3']
[]

([['x_1', 'x_2', 'x_3'], []], [['x_2', 'x_3'], ['x_1']])
[['x_1', 'x_2', 'x_3'], []]
[['x_2', 'x_3'], ['x_1']]

第一个示例的输出是我所期望的输出。但是我没有得到第二个例子的第一个输出。为什么我得到的是一个元组而不是元组中包含的第一个列表:[['x\u 1','x\u 2','x\u 3'],[]]?你知道吗


Tags: intest示例类型列表for参数def
2条回答

当您使用星号作为参数的修饰符时,它将允许您在调用函数时传递任意多个参数。你知道吗

def test(*args):
    # Do anything

test(v1)
test(v1, arg, another, something)
test()

它将把调用中的所有参数连接到一个元组中。你知道吗

当您只需将一个参数传递给函数调用时,元组参数将只包含这一个参数,而不管此对象实际具有什么类。只需在迭代之前进行打印。然后您将看到args的实际值,其解析为:

([['x_1', 'x_2', 'x_3'], []],)


如果您想将iterable传递给函数,并将第一层的元素展开到参数中,只需在调用时再次使用星号即可。你知道吗

>> test(*testTuple1)
['x_1', 'x_2', 'x_3']
'x_1'
'x_2'
[]

IndexError: ....

索引器发生了,因为空列表没有第0个元素,甚至没有第一个要获取的元素。你知道吗

因为在python中,paren既用于创建文本元组,也用于表达式的一般分组,这就产生了一些歧义。以下是您的列表,为清晰起见,添加了一些格式:

testTuple1 = (
               [
                 ["x_1", "x_2", "x_3"], 
                 []
               ]
             )

testTuple2 = (
               [
                 ['x_1', 'x_2', 'x_3'], 
                 []
               ], 
               [
                 ['x_2', 'x_3'], 
                 ['x_1']
               ]
             )

testTuple1,因为外部参数只包含一个项目(最外层的列表),所以将计算为只包含该外部列表。帕伦一家就这么走了。但是在testTuple2中,由于有多个逗号分隔的列表,它将计算为一个元组。你知道吗

如果希望第一个参数也是元组,则需要在外部列表后添加一个尾随逗号,以明确地让python知道这些参数是用来表示1元组的,而不仅仅用于分组:

testTuple1 = ([["x_1", "x_2", "x_3"], []],)

相关问题 更多 >

    热门问题