遍历元组列表

时间:2019-02-26 05:28:18

标签: python python-3.x

我想遍历元组列表 (例如[('One', 1), ('Two', 2), ('Three', 3)])。

如果我尝试

for i,j in list:
    print(list[i] + " | " + list[j])

我收到一个类型错误,说“列表索引必须是整数或切片,而不是str”。

我该如何解决,这样我的输出将类似于:

One | 1
Two | 2
Three | 3

6 个答案:

答案 0 :(得分:4)

for i,j in list:
    print(list[i] + " | " + list[j])

应更改为

for i, j in list:
    print(i + " | " + str(j))

因为i和j不是索引而是值。

请注意,将两个字符串加在一起时,您将它们串联在一起,这在Python社区中通常被视为不好的做法。每个串联都会创建一个新的字符串对象,该对象占用一个新的内存位置,这可能会降低程序速度。许多人还争辩说,级联不是很易读,因为要具有正确的格式,需要使用前导和尾部空格字符。使用最广泛的替代方法是string formatting

for i, j in list:
    print("{} | {}".format(i, j))

此外,请勿在变量list中使用内置名称,因此建议您采用其他变量:

for i, j in list_iterate:
        print("{} | {}".format(i, j)

答案 1 :(得分:0)

您可以执行以下操作。

ll = [('One', 1), ('Two', 2), ('Three', 3)]

for x, y in ll:
    print(x + " | " + str(y), end=' ')

我将end保留为'',因为您所需的输出在一行中

如果您不想这样做

for x, y in ll:
    print(x + " | " + str(y))

您的代码print(list[i] + " | " + list[j])中出现错误,因为您正在使用列表中的值来索引相同的列表。

您收到错误" list indices must be integers or slices, not str",因为您试图在循环中索引list['One']。在python中无效。

此外,如注释中所述,请勿将关键字用作变量名。

答案 2 :(得分:0)

答案的问题在于list[i]str,而list[j]int,因此无法以合并的方式将两者合并。 / p>

我认为只使用一个iterator就可以解决问题。

tuple_to_iterate = [('One', 1), ('Two', 2), ('Three', 3)]
for a_tuple in tuple_to_iterate:
    print (a_tuple[0] + " | " + str(a_tuple[1]))

希望这能回答您的问题!

答案 3 :(得分:0)

这应该可以解决问题,您几乎已经掌握了!

x = [('One', 1), ('Two', 2), ('Three', 3)]

for i,j in x:
    print(f"{i} | {j}")

当您遍历元组列表并为每个迭代分配多个值(在此示例中为i和j)时,您不再需要处理实际的元组,现在有了一个字符串(i)和一个int( j)。

类似于:

x = (1, 2)
print(type(x)) # <class 'tuple'>
a, b = x
print(a)       # 1
print(type(a)) # <class 'int'>
print(b)       # 2
print(type(b)) # <class 'int'>

没有迭代

答案 4 :(得分:0)

my_list = [('One', 1), ('Two', 2), ('Three', 3)]
for i,j in my_list:
    print(i + " | " + str(j))

另一种格式化字符串的选项:

for i,j in my_list:
    print("{} | {}".format(i,j))

答案 5 :(得分:0)

您可以使用list comprehension在同一行中完成同一操作。

nested_list = [('One', 1), ('Two', 2), ('Three', 3)]
print([l[0]+' | '+str(l[1]) for l in nested_list])

输出: ['One | 1', 'Two | 2', 'Three | 3']

作为单个字符串, print('\n'.join([l[0]+ ' | '+str(l[1]) for l in ll]))

输出:

One | 1 
Two | 2 
Three | 3
相关问题