如何在Python 3中打印列表列表中前两个子列表的前两个元素?

6xfqseft  于 2023-05-30  发布在  Python
关注(0)|答案(5)|浏览(200)

我有一个列表列表,我想打印前2个子列表的前2个元素。
我不知道我是否以错误的方式接近它,但我没有得到想要的输出。
下面是我的代码:

x = [[1, 2, 3, 4, 5, 6],
    ['a', 'b', 'c'],
    [1.1, 2.2, 3.3]]

print(x[0:2])
print(x[0:2][0:2])

输出:

[[1, 2, 3, 4, 5, 6], ['a', 'b', 'c']]
[[1, 2, 3, 4, 5, 6], ['a', 'b', 'c']]

预期产出:

[[1, 2, 3, 4, 5, 6], ['a', 'b', 'c']]
[[1, 2], ['a', 'b']]
yjghlzjz

yjghlzjz1#

x是一个列表。
显然,您希望x[:2]也是一个包含x中的两个元素的列表,而不管它们的内容如何。
现在写出来

y = x[:2]
print(y[:2])

显然,这将打印x的前两个元素,而不管内容如何。
访问列表而不是子列表的元素的方法是使用单个整数索引或通过迭代。

for y in x[:2]:
    print(y[:2])

你可以使用一个comprehension更紧凑地迭代:

print(*(y[:2] for y in x[:2]), sep='\n')
bnl4lu3b

bnl4lu3b2#

在这里,您可以简单地获得预期的结果:

for item in x[:2]:
    print(item[0:2])

但是如果你有一个同构的嵌套列表(相同的行数和列数),你可以将它转换为NumPy数组,然后使用多维切片,这更容易。例如,对于如下列表:

x = [[1, 2, 3],
    ['a', 'b', 'c'],
    [1.1, 2.2, 3.3]]

您可以:

x = np.array(x)
print(x[:2, :2])
cedebl8k

cedebl8k3#

我认为你应该尝试像x[1:2]我附上了类似的问题解决的链接,在堆栈上的流,可能会帮助你Stack over flow slicing
Python slicing是如何工作的link python slicing works with description

wztqucjr

wztqucjr4#

这样的东西可以做到这一点:

print([l[:2] for l in x[:2]])
[[1, 2], ['a', 'b']]

说明:

  • x[:2](或x[0:2])获取前2个子列表。
  • for l in x[:2]在每次迭代时将每个子列表分配给l
  • l[:2]取子列表的前2个元素。

为什么x[0:2][0:2]不能用?

  • x是子列表的列表。
  • x[0:2]返回一个包含前两个子列表的列表。
  • x[0:2][0:2](x[0:2])[0:2]相同,(x[0:2])[0:2]相当于x[0:2],因为它从前2个子列表中获取前2个子列表。
jqjz2hbq

jqjz2hbq5#

x = [[1, 2, 3, 4, 5, 6],
    ['a', 'b', 'c'],
    [1.1, 2.2, 3.3]]

k=[]
for y in x[0:2]:
    k.append(y[0:2])

print(k)
#[[1, 2], ['a', 'b']]

相关问题