【问题标题】:Python, Make variable equal to the second column of an arrayPython,使变量等于数组的第二列
【发布时间】:2018-09-20 02:20:17
【问题描述】:

我意识到这很有可能在其他地方被问过,但老实说,我不确定我应该使用什么术语来搜索它。 但基本上我有一个包含不同数量元素的列表。每个元素包含 3 个值:一个字符串、另一个列表和一个整数,例如:

第一个元素 = ('A', [], 0)

所以

元素列表[0] = [('A', [], 0)]

我要做的是创建一个新列表,其中包含 ListofElements 中给出的所有整数(元素中的第三件事)。

我已经可以通过遍历 ListofElements 的每个元素然后将整数附加到此处显示的新列表中来做到这一点:

NewList=[]
for element in ListofElements:
    NewList.append(element[2])

但是使用 for 循环似乎是最基本的方法,有没有一种使用更少代码的方法?也许是列表理解或类似的东西。似乎应该可以在一行中完成。


这只是我最终目标的一步,即找出 ListofElements 中具有最小整数值的元素的索引。所以到目前为止我的过程是创建一个新列表,然后使用以下方法找到该新列表的整数索引:

index=NewList.index(min(NewList))

有没有一种方法可以避免完全创建新列表并直接从原始 ListofElements 生成索引?我不知道我需要在这里填写什么,或者我将如何迭代:

min(ListofElements[?][2])

【问题讨论】:

  • 你的意思是NewList = [element[2] for element in ListofElements]

标签: python list indexing list-comprehension min


【解决方案1】:

您可以通过itemgettermap 您的列表:

>>> from operator import itemgetter
>>> l = [(1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3), (1, 2, 3)]
>>> map(itemgetter(2), l)
[3, 3, 3, 3, 3]

然后你可以用你的方法找到最小值的位置。

【讨论】:

    【解决方案2】:

    您可以使用列表理解:

    [x[2] for x in ListOfElements]
    

    这通常被认为是一种“Pythonic”方法。

    您还可以使用以下方法以相当时尚的方式找到最小值:

    minimum = min(ListOfElements, key=lambda x: x[2])
    index = ListOfElements.index(minimum)
    

    一些一般说明:

    1. 在 python 中使用下划线是标准而不是 CamelCase。
    2. 在 python 中,您几乎不必使用显式 for 循环。反而更喜欢 共同理解或功能模式(mapapply 等)

    【讨论】:

    • 感谢您的回答和指点,我对 python 还是很陌生,所以仍然掌握理解的窍门。在那之后,我还要看看 lambda 函数!
    猜你喜欢
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2022-12-18
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多