使用 input().split() 列表理解
list comprehension with input().split()
我必须读取 N 然后 N 两个数字的元组,如下例所示:
3
1 85
2 91
3 73
之后我想根据第二个元素对它们进行排序,并按它们进入输入的顺序打破联系。为此,我想保存一个包含 3 个元素的元组,但我不知道如何将其放入列表理解语法中。
我想要一个相当于:
的理解
n = int(input())
l = []
for i in range(n):
v1, v2 = input().split()
l.append((int(v1), int(v2), i))
这是我试过的方法:
n = int(input())
l = [(int(v1), int(v2), i) for v1, v2 in input().split() for i in range(n)]
使用tuple()
and list comprehension:
num_tuples = int(input())
lst = [tuple([int(x) for x in input().split()] + [i]) for i in range(num_tuples)]
print(lst)
示例输入:
2
1 2
3 4
输出:
[(1, 2, 0), (3, 4, 1)]
你可以做这样的事情:
l = [(*map(int, input().split()), i) for i in range(int(input()))]
但这非常令人困惑和难以理解,当您的 for 循环完全足够时,为什么还要这样做?
让我们先写出程序,不要压缩语法来建立我们的起点
n = int(input())
l = []
for i in range(n):
v1, v2 = input().split()
l.append((int(v1), int(v2), i))
l = sorted(l, key=lambda x: (x[1], x[2])) # here is the line I'm adding to sort
print(l)
$ python3 test.py
3
1 85
2 91
7 91
[(1, 85, 0), (2, 91, 1), (7, 91, 2)]
将 for 循环中的两个语句放入列表推导中有点复杂——也许更糟:很难维护或阅读(尽管前面的两个答案都说明了如何完成) ,所以如果你想做一个单行,我在这里建议的是将它放在一个 map
和 lambda
函数中,例如:
def my_function(num):
v1, v2 = input().split()
return (int(v1), int(v2), num)
n = int(input())
l = map(my_function, range(n))
漂亮且可读。如果您还想在一行中进行排序(以及其他所有操作),您当然可以这样做:
sorted(map(my_function, range(int(input())), key=lambda x: (x[1], x[2]))
# 1 2
# 2 3
# [(1, 2, 0), (2, 3, 1)]
这是整体的样子(一旦我弄明白了,我会添加一个分享 link):
我必须读取 N 然后 N 两个数字的元组,如下例所示:
3
1 85
2 91
3 73
之后我想根据第二个元素对它们进行排序,并按它们进入输入的顺序打破联系。为此,我想保存一个包含 3 个元素的元组,但我不知道如何将其放入列表理解语法中。
我想要一个相当于:
的理解n = int(input())
l = []
for i in range(n):
v1, v2 = input().split()
l.append((int(v1), int(v2), i))
这是我试过的方法:
n = int(input())
l = [(int(v1), int(v2), i) for v1, v2 in input().split() for i in range(n)]
使用tuple()
and list comprehension:
num_tuples = int(input())
lst = [tuple([int(x) for x in input().split()] + [i]) for i in range(num_tuples)]
print(lst)
示例输入:
2
1 2
3 4
输出:
[(1, 2, 0), (3, 4, 1)]
你可以做这样的事情:
l = [(*map(int, input().split()), i) for i in range(int(input()))]
但这非常令人困惑和难以理解,当您的 for 循环完全足够时,为什么还要这样做?
让我们先写出程序,不要压缩语法来建立我们的起点
n = int(input())
l = []
for i in range(n):
v1, v2 = input().split()
l.append((int(v1), int(v2), i))
l = sorted(l, key=lambda x: (x[1], x[2])) # here is the line I'm adding to sort
print(l)
$ python3 test.py
3
1 85
2 91
7 91
[(1, 85, 0), (2, 91, 1), (7, 91, 2)]
将 for 循环中的两个语句放入列表推导中有点复杂——也许更糟:很难维护或阅读(尽管前面的两个答案都说明了如何完成) ,所以如果你想做一个单行,我在这里建议的是将它放在一个 map
和 lambda
函数中,例如:
def my_function(num):
v1, v2 = input().split()
return (int(v1), int(v2), num)
n = int(input())
l = map(my_function, range(n))
漂亮且可读。如果您还想在一行中进行排序(以及其他所有操作),您当然可以这样做:
sorted(map(my_function, range(int(input())), key=lambda x: (x[1], x[2]))
# 1 2
# 2 3
# [(1, 2, 0), (2, 3, 1)]
这是整体的样子(一旦我弄明白了,我会添加一个分享 link):