如何在python中分解连接列表

时间:2018-05-17 15:32:24

标签: python python-3.x

我是python的新手并试图了解python代码的工作原理。有人可以帮我理解代码。 下面是代码

n=int(input())
marksheet=[[input(),float(input())] for i in range(n)]
i=''
print(marksheet)
print([marks for name,marks in marksheet])

我的输入是

2
sam
98
mike
95

输出我正在

[['sam', 98.0], ['mike', 96.0]]

[98.0, 96.0]

我的第二份印刷声明得到了我想要的结果,但我不明白它在做什么。我把它改成了这样的东西,它仍然有用

print([test for yellow,test in marksheet])

有人可以帮助我理解。

注意:我是python的新手,所以我正在寻求帮助。请不要使用任何侮辱性的语言。

3 个答案:

答案 0 :(得分:0)

在列表中迭代时,您正在解包名称和test_score元组。

以同样的方式获取名称:

print([name for name,marks in marksheet])

输出:

['sam', 'mike']

再次获取整个元组列表。虽然这是微不足道的,但我只是想让你明白

print([(name,marks) for name,marks in marksheet])

输出:

[('sam', 98.0), ('mike', 96.0)]

答案 1 :(得分:0)

为了理解你的代码,最好逐行分解

n=int(input()) #takes input from a user and converts it to integer

由于默认情况下input()是一个字符串,如果输入一个类似3的数字,输出将是字符串" 3"。 int(" 3")将字符串3转换为实际数字3

marksheet=[[input(),float(input())] for i in range(n)] # List comprehension

列表理解,在这种情况下,创建一个列表,列表看起来像这[[int,float],[int,float]],n次。因此,如果第一行中的n = 2,则标记表将要求输入4个数字。

例:

n=int(input()) #let's say enter 2
2
marksheet=[[input(),float(input())] for i in range(n)] #enter 1,2,3,4
1
2
3
4
print(marksheet) #outputs [['1', 2.0], ['3', 4.0]]

这个只是创建一个空字符串

i=''

print(marksheet) # self explanatory

你宁愿在这里混淆名字。由于您的列表看起来像[int,float],

print([marks for name,marks in marksheet]) # outputs [2.0, 4.0]

打印你的浮动。更好的印刷声明是:

print([float for int,float in marksheet]) # outputs [2.0, 4.0]

请注意,名称无关紧要。它只是列表中变量的位置。

print([second for first,second in marksheet]) #same thing

希望这会有所帮助。另外,我的答案是:)

答案 2 :(得分:0)

第1行

n=int(input())

此行从控制台获取新的行输入。这里,控制台中的第一行是2,因此n=2

第2行

marksheet=[[input(),float(input())] for i in range(n)]

这是列表理解。一个更容易理解的翻译将是

for i in range(n):
    p = input()
    q = float(input())
    marksheet.append([p,q])

第3行

i=''

i分配给空字符串。不是必需的。

第4行

print(marksheet)

打印标记表

第5行

print([marks for name,marks in marksheet])

这可能有些令人困惑。这也是列表理解。你正在为每个内部数组迭代它。

for name,marks in marksheet: '''Here name would be 1st element of inner array and 2nd element would be 2nd element of inner array.'''
    all_marks.append(marks)
print(all_marks)

完成工作程序

n=int(input())
marksheet=[]
for i in range(n):
    p = input()
    q = float(input())
    marksheet.append([p,q])
print(marksheet)
all_marks=[]
for name,marks in marksheet:
    all_marks.append(marks)
print(all_marks)