【问题标题】:List a specific position in each list within a list (python)列出列表中每个列表中的特定位置(python)
【发布时间】:2015-02-26 18:30:41
【问题描述】:

有没有办法选择矩阵中的每个第 2 个或第 3 个(例如)项目?

例如:

f = [["1", "5", "8", "9"], ["2", "6", "9", "10"], ["3", "7", "11", "12"]]

我想知道是否有一个直接函数可以选择每个列表中的每个第二个数字(最好将这些数字也放入一个列表中)。从而导致:

["5", "6", "7"]

我知道我可以使用循环来实现这一点,但我想知道我是否可以直接实现这一点。

【问题讨论】:

标签: python list python-3.x matrix position


【解决方案1】:

没有任何循环(外部)

>>> f = [["1", "5", "8", "9"], ["2", "6", "9", "10"], ["3", "7", "11", "12"]]
>>> list(map(lambda x:x[1],f))  # In python2, The list call is not required
['5', '6', '7']

参考:map

另一种没有循环的方法(礼貌:Steven Rumbalski

>>> import operator
>>> list(map(operator.itemgetter(1), f))
['5', '6', '7']

参考:itemgetter

另一种无需循环的方式(礼貌:Kasra A D

>>> list(zip(*f)[1])
['5', '6', '7']

参考:zip

【讨论】:

  • 请注意:列表组合在少数情况下更符合 Python 风格,但在大多数情况下并非如此……stackoverflow.com/a/1247490/4099593……但是正如您提到的那样 我知道我可以做到这一点使用循环,但我想知道我是否可以直接实现这一点。 map 是您在不使用任何循环的情况下完成工作的唯一方法!
  • 同意。列表比较是最好的。也是一个可用选项list(map(operator.itemgetter(1), f))。如果使用 Python 2,则可以省略对 list() 的调用。
  • @StevenRumbalski 是的,但我一直坚持要拨打list,以防万一未来的用户尝试这个!
  • 您可以将zip 添加到解决方案集合中;):>>> zip(*f)[1] ('5', '6', '7')
【解决方案2】:

试试list comprehension:

seconds = [x[1] for x in f]

【讨论】:

    【解决方案3】:

    您可以使用列表推导:

    i = 1  # Index of list to be accessed
    sec = [s[i] for s in f if len(s) > i]
    

    此代码还将在每个子列表中检查索引是否为有效值。

    【讨论】:

      猜你喜欢
      • 2017-03-21
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 2019-05-16
      • 2023-02-25
      • 1970-01-01
      相关资源
      最近更新 更多