[英]Python, how to print specific items from lists in lists?
我正在尝试打印列表num_list
中所有列表的第一项和最后一项。
num_list = [[1,2,3],[10,20,30],[100,200,300]]
for x in range(0,3):
for y in range(0,1) and range(2,3):
print(num_list[x][y])
但这只是打印3,30,300
并跳过1,10
和100
。
解决这个问题的好方法是什么?
使用索引。
前任:
num_list = [[1,2,3],[10,20,30],[100,200,300]]
for i in num_list:
print(i[0], i[-1]) #i[-1] == negative indexing.
输出:
1 3
10 30
100 300
您不需要使用范围来完成您的任务。
无论如何,即使您愿意,您的代码中也存在错误
range(0,1) and range(2,3)
根据定义and
返回第一个值为 False 的值,否则返回表达式中的最后一个值。
因此,在您的情况下,它只返回range(2,3)
。
的确,
range(0,1) and range(2,3)
返回
range(2, 3)
因为bool(range(0,1))
和bool(range(2,3))
都被评估为 True。
这就是为什么它们都是非空序列的原因。 实际上bool(range(2,2))
将被评估为False
为空。 有关更多详细信息,请参阅文档。
你应该写一些类似的东西
import itertools
num_list = [[1,2,3],[10,20,30],[100,200,300]]
for x in range(0,3):
for y in itertools.chain(range(0,1), range(2,3)):
print(num_list[x][y])
使用itertools.chain 。
可能是最小的解决方案:
num_list = [[1,2,3],[10,20,30],[100,200,300]]
for x in num_list:
print(x[0], x[-1])
range(0,1) 和 range(2,3) 返回 => range(2,3)
num_list = [[1, 2, 3], [10, 20, 30], [100, 200, 300]]
for each in num_list:
print (each[0], each[-1])
num_list = [[1,2,3],[10,20,30],[100,200,300]]
for x in range(0,3):
for y in range(len(num_list[x])):
if y==0 or y==2:
print(num_list[x][y])
你可以使用上面的代码
这是基于原始解决方案的答案,但不是最好的
num_list = [[1,2,3],[10,20,30],[100,200,300]]
for x in range(0, len(num_list)):
for y in range(0,3,2): #where the change should be
print(num_list[x][y],end=' ') #display the results in one line
如果您想要短单行,其他解决方案:
如果一行打印对您有好处,则有 3 种 oneliner 解决方案:
print(*[num for elem in vec for num in elem[0:3:2]])
print(*[num for elem in vec for num in elem[0:1]+elem[2:3]])
print(*[num for elem in vec for num in elem[0:1]+elem[-1:]])
输出:
1 3 10 30 100 300
或每行打印一个数字:
print('\n'.join([str(num) for elem in vec for num in elem[0:3:2]]))
1
3
10
30
100
300
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.