python - 从每个列表中删除第三个元素和第二个元素,并查找二维列表中最后一个元素在特定范围内的列表

标签 python list python-3.x matrix

我有两个问题。

第一个问题:

我想知道如何从二维列表问题中删除每个第二个元素和第三个元素,以便变量questions最初如下:

>>> questions
>>> [['Johny', 'Baby', 'Shaw', '1984'], ['Andrew', 'fJKC', 'cbv bv', '1975'], ['Harry', 'Jack', 'Son', '1993']]

最终结果变为:

>>> questions
>>> [['Johny', '1984'], ['Andrew', '1975'], ['Harry', '1993']]

第二个问题:

如何找到一种方法来了解两个值:(最小值,最大值),打印列表问题中的三个列表中的最后一个元素在范围(最小值,最大值)中的任何一个。

预期结果:

例如,显然按照之前的结果,最小值为 1980,最大值为 2000。它打印以下内容:

>>> ['Johny', '1984'], ['Harry', '1993']

这是我的尝试:

beginning = int(input('Beginning: '))
ending = int(input('Ending: '))
position = []
for anyitem in range((len(questions)-1)):
    position1 = int(questions[anyitem][2][-4:])
        if beginning < position1 < ending:
            print(questions[anyitem][3])
        else:
            pass

请不要使用numpy或任何需要导入的函数。另外,请使解决方案变得通用,以便它可以应用于不仅包含 3 个元素(如我的例子)而且包含多个元素(适合每个人)的 2D 列表。

最佳答案

这两者都可以通过列表推导式轻松完成。

删除某些元素:

>>> nquestions = [[i ,j] for i, *_, j in questions]
>>> nquestions
[['Johny', '1984'], ['Andrew', '1975'], ['Harry', '1993']]

在这里,我们从每个子列表中解压,用 *_ 扔掉中间元素,同时保留第一个和最后一个元素,以便从中创建新列表。

对于过滤,最好创建一个自定义range并使用另一个列表理解来过滤掉该范围内的值:

>>> r = range(1980, 2000)
>>> [i for i in nquestions if int(i[1]) in r]
[['Johny', '1984'], ['Harry', '1993']]
由于值是字符串,因此需要

int(i[1])。除了非常直观之外,范围对象的成员资格测试也非常高效(参见:Why is "1000000000000000 in range(1000000000000001)" so fast in Python 3?)。

关于python - 从每个列表中删除第三个元素和第二个元素,并查找二维列表中最后一个元素在特定范围内的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40696659/

相关文章:

python - 递归错误 : maximum recursion depth exceeded in comparison

python - 当 Cisco 路由器的 ssh 命令产生大量输出时,subprocess.CalledProcessError 和 ssh 连接断开

python - 字符串语法不正确,占用超过 1 行 Python

python - 未找到 Conda 命令

java - 查找 List<Long> 中与某个元素相对应的所有索引的方法

python-3.x - 如何将 gridspec 与 plt.subplots() 结合起来以消除子图行之间的空间

python - 如何以给定的格式反转这本字典?

python - 如何替换 Pandas 数据框中字符串中的空格?

Jquery列表显示/隐藏5个项目onclick

python - 简单的 python 2.7 代码有某种问题 : "' list' object has no attribute 'find' "