【问题标题】:Collecting first item of a list in a list of lists在列表列表中收集列表的第一项
【发布时间】:2021-01-28 05:33:39
【问题描述】:

我有一个如下所示的列表:

my_list = [[[(2,3,4,5)]],[[8,2,4,2]],[[9,0,0,0]]]

现在,我想找到一种方法来创建一个新列表 zero_list,其元素将是 my_list 中每个元素的第 0 个条目。那是

zero_list = [2, 8, 9]

如何创建for 循环来迭代列表的第 0 个元素,其元素本身就是列表?当然,在我的真实示例中,我有一个更大的此类列表,其中包含数千个本身就是列表的条目。

附:我知道这可能是一个简单的问题,但我无法弄清楚。

【问题讨论】:

  • 子列表的深度是否随机?
  • 都是一样的。上述示例的解决方案将帮助我解决我目前遇到的更大问题。只有 1 级深度。主列表,其条目是实数列表。
  • 样本my_list 有三个列表,深度分别为3、2、2。你能改变你的样本来反映你的情况吗?
  • 元组也是你代码的一部分吗?

标签: python list for-loop iterator


【解决方案1】:

对于任何深度列表,您都可以使用此递归函数

def get_first(seq):
    if isinstance(seq, (tuple, list)):
        return get_first(seq[0])
    return seq

def get_zero_list(seq):
    return [get_first(i) for i in seq]



my_list = [[[[[[[[(2,3,4,5)]]]]]]],[[8,2,4,2]],[[9,0,0,0]]]

print(get_zero_list(my_list)) # [2, 8, 9]

my_list = [[[[[[[[(2,3,4,5)]]]]]]],[[[[[[[('first', 3)]]]], 2, 3],2,4,2]],[[([['a', 2]]),0,0,0]]]

print(get_zero_list(my_list)) # [2, 'first', 'a']

【讨论】:

  • 谢谢,但这不是我需要的。我需要一个列表,其输出是每个子列表的第一个元素。
  • 这是一个很好的答案。我想知道是否有标准方法来执行此操作而不是定义这两个函数。
  • 谢谢,这也是一个有趣的问题,afaik 不存在,但如果我找到了,我会编辑它
  • 为什么我很难概括到第二个索引? def get_second(seq): if isinstance(seq, (tuple, list)): return get_second(seq[1]) return seq def get_first_list(seq): return [get_second(i) for i in seq]
  • 第二个或nth索引没有元素怎么办?你期望的行为是什么?新列表应该只包含 nth 元素,前提是它存在于嵌套列表中?
【解决方案2】:
Zero_list = [ items[0] for sublist in my_list for items in sublist] 

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 2022-11-28
    • 1970-01-01
    • 2021-12-31
    • 2015-07-26
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多