我有两个问题。
第一个问题:
我想知道如何从二维列表问题中删除每个第二个元素和第三个元素,以便变量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/