我想遍历元组列表
(例如[('One', 1), ('Two', 2), ('Three', 3)]
)。
如果我尝试
for i,j in list:
print(list[i] + " | " + list[j])
我收到一个类型错误,说“列表索引必须是整数或切片,而不是str”。
我该如何解决,这样我的输出将类似于:
One | 1
Two | 2
Three | 3
答案 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