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

2024-09-30 23:44:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个问题。你知道吗

第一个问题:

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

>>> 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个元素(在我的情况下),但许多元素(每个人)。你知道吗


Tags: 元素列表inputendingbabyintquestionsandrew
3条回答

这两种方法都很容易使用列表理解和条件:

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

print([x[:1]+x[3:] for x in questions])

结果:

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

过滤开启年份:

print([x[:1]+x[3:] for x in questions if int(x[-1])>=1980 and int(x[-1])<=2000])

结果:

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

请注意,当您需要临时变量/副作用时,listcomps不是最好的(如上所述:int(x[-1])必须计算两次,在年份的情况下,我们可以使用快捷方式并使用字符串比较,从1000年到9999年:

print([x[:1]+x[3:] for x in questions if x[-1]>="1980" and x[-1]<="2000"])

当我们到了10000年,我会编辑我的答案:)

问题1:

questions = [['Johny', 'Baby', 'Shaw', '1984'], ['Andrew', 'fJKC', 'cbv bv', '1975'], ['Harry', 'Jack', 'Son', '1993']]
new_questions = [[lst[0], lst[3]] for lst in questions]

问题2,假设您想使用原始的questions列表:

in_range = [[lst[0], lst[3]] for lst in questions if int(lst[3]) in range(1980, 2001)]

两者都可以通过列表理解轻松完成。你知道吗

删除某些元素:

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

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

对于筛选,最好创建一个自定义的^{},并使用另一个列表理解来筛选出in范围内的值:

>>> r = range(1980, 2000)
>>> [i for i in nquestions if int(i[1]) in r]
[['Johny', '1984'], ['Harry', '1993']]

int(i[1])是必需的,因为值是字符串。除了非常直观之外,range对象的成员资格测试也非常有效(参见:Why is "1000000000000000 in range(1000000000000001)" so fast in Python 3?)。你知道吗

相关问题 更多 >