【发布时间】:2019-03-11 13:48:21
【问题描述】:
我在 Python 中有以下格式的数组:
Array[('John', '123'), ('Alex','456'),('Nate', '789')]
有没有一种方法可以按字段分配数组变量,如下所示?
Name = ['john', 'Alex', 'Nate']
ID = ['123', '456', '789']
【问题讨论】:
我在 Python 中有以下格式的数组:
Array[('John', '123'), ('Alex','456'),('Nate', '789')]
有没有一种方法可以按字段分配数组变量,如下所示?
Name = ['john', 'Alex', 'Nate']
ID = ['123', '456', '789']
【问题讨论】:
本着“显胜于隐”的精神:
data = [('John', '123'), ('Alex', '456'), ('Nate', '789')]
names = [x[0] for x in data]
ids = [x[1] for x in data]
print(names) # prints ['John', 'Alex', 'Nate']
print(ids) # prints ['123', '456', '789']
甚至,更明确地说:
data = [('John', '123'), ('Alex', '456'), ('Nate', '789')]
NAME_INDEX = 0
ID_INDEX = 1
names = [x[NAME_INDEX] for x in data]
ids = [x[ID_INDEX] for x in data]
【讨论】:
这是一种使用zip 的简洁方式:
lst = [('John', '123'), ('Alex','456'),('Nate', '789')]
name, userid = list(zip(*lst))
print(name) # ('John', 'Alex', 'Nate')
print(userid) # ('123', '456', '789')
请注意,结果存储在(不可变的)tuples 中;如果你需要 (mutatble) lists 你需要转换。
【讨论】:
lists 你需要投射”是什么意思? Python 中没有强制转换。
int('123') 演员吗? (这里我的意思是:list(name)。)
int('123') 时,你只是调用int.__init__(..., '123'),int 类可以做任何它想做的事情。它可能会产生一个副作用,即生成一个新类型的新对象,而这不是它的主要目的。