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_Printing - Fatal编程技术网

Python,如何从列表中的列表打印特定项?

Python,如何从列表中的列表打印特定项?,python,list,printing,Python,List,Printing,我正在尝试打印列表列表中所有列表的第一项和最后一项num\u 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,30300并跳过1,10和100 解决此问题的好方法是什么?使用索引 Ex: num_list = [[1,2,3],[10,20,3

我正在尝试打印列表列表中所有列表的第一项和最后一项
num\u 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,30300
并跳过
1,10
100

解决此问题的好方法是什么?

使用索引

Ex:

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
输出:

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

范围(0,1)和范围(2,3)返回=>范围(2,3)

您不需要使用范围来完成任务。
不管怎样,即使您愿意,代码行中也有一个错误

range(0,1) and range(2,3)
根据定义,
返回第一个为False的值,否则,如果没有,则返回表达式中的最后一个值。
因此,在您的情况下,它只返回
范围(2,3)

的确

range(0,1) and range(2,3)
返回

range(2, 3)
因为
bool(范围(0,1))
bool(范围(2,3))
都被评估为真。
这就是为什么它们都是非空序列。实际上
bool(范围(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])
使用


您可以使用上述代码

可能是最小的解决方案:

num_list = [[1,2,3],[10,20,30],[100,200,300]]
for x in num_list:
    print(x[0], x[-1])

这是基于原始解决方案的答案,但不是最佳答案

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

如果您需要简短的OneLiner,请使用其他解决方案:

3个单行解决方案如果一行打印对您有好处:

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

范围(0,1)和范围(2,3)
这与您认为的不同。它只返回
range(2,3)
,因为
bool(range(0,1))
True
(请参阅)。你想要的是[0,2]中y的
(我希望如此)。谢谢@FHTMitchell,为什么范围(0,1)返回true?@FHTMitchell只是想了想,如果范围(0,1)返回true,那么范围(2,3)为什么也返回范围(2,3)而不是true?
范围(0,1)
不返回
true
bool(范围(0,1))
返回
True
bool(范围(2,3))
,因为
bool(序列)
通常与
len(序列)>0相同<代码>a和b
b相同,如果a是其他a
。这是一个非常基本的python概念。请参阅我之前提供的链接。感谢@FHTMitchell的评论。当您说bool(sequence)通常与len(sequence)相同时,这是否意味着字符串“range(0,1)”的长度大于0时,它返回true?对不起,如果我做得太离谱了!我只是想理解。这个答案是一个声明性的陈述。这已经足够好了(不是真的)。您能否详细说明python为什么会这样做,并尝试解决“解决此问题的好方法是什么?”谢谢。谢谢。intertools的作用是什么?当您说“并返回第一个值,该值为False,否则,如果没有,则返回表达式中的最后一个值”-您的意思是范围(0,1)为False吗?或者你是说因为范围(0,1)不是false,所以它返回最后一个值(范围(2,3))?对不起,我有点糊涂了!itertools()包括一组处理迭代器的函数。在本例中,您希望迭代两个迭代器
range(0,1)
range(2,3)
。要做到这一点,可以像示例中那样使用
itertools.chain
。在您的特定情况下,这是不必要的,因为列表的直接索引就足够了。因为
bool(范围(0,1))
bool(范围(2,3))
被评估为True,所以返回的值是
bool(范围(2,3))
。这就是为什么你只得到
3,30,300
作为输出。再仔细想想,如果范围(0,1)返回True,那么为什么范围(2,3)也返回范围(2,3),而不仅仅是“True”?你能解释一下你的答案吗?每个人都做什么?每个[0],每个[-1]结构意味着什么?就像在“each[0]”和“each[-1]”之间打印一样,这在某种程度上相当于范围(0,1)?
每个
都只是
num\u列表的每个元素
,所以在第一次迭代中
每个
都是
[1,2,3]
,第二次是
[10,20,30]
,第三次是
[100200300]
<代码>每个[0],每个[-1]
是每个
每个
的第一个和最后一个元素,因此例如
[1,3]
@FHTMitchell此代码是用python3@JoshuaESummers
编写的,每个
表示列表中的元素。这意味着每个
在第一次迭代中将有值
[1,2,3]
,在第二次迭代中将有值
[10,20,30]
,最后将是
[100200300]
。第一次迭代:打印每个[0],每个[-1]输出=>1 3第一次迭代:打印每个[0],每个[-1]输出=>10 30第一次迭代:打印每个[0],每个[-1]输出=>100 300Hi,您介意解释一下为什么使用-1吗?我知道我[0]是1,10100。。。但是为什么我[-1]330300?谢谢@Rakesh,要“激活”负面列表索引,你只需要使用负面符号吗?那么代码就知道你在使用NLI?@JoshuaESummers不完全是这样。这不是象征,而是价值
(-1)
是值。你也可以先做
x=-1
,然后再做
i[x]
。你的解决方案的优缺点是什么?这个答案是对作者答案的一种修正,不是一个创新的答案,使用像@Shivam Jha solution这样的负面索引方法会更有效