【问题标题】:Python Array Variable AssignPython 数组变量赋值
【发布时间】:2019-03-11 13:48:21
【问题描述】:

我在 Python 中有以下格式的数组:

Array[('John', '123'), ('Alex','456'),('Nate', '789')]

有没有一种方法可以按字段分配数组变量,如下所示?

Name = ['john', 'Alex', 'Nate']
ID = ['123', '456', '789']

【问题讨论】:

标签: python arrays loops


【解决方案1】:

本着“显胜于隐”的精神:

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]

【讨论】:

    【解决方案2】:

    这是一种使用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 类可以做任何它想做的事情。它可能会产生一个副作用,即生成一个新类型的新对象,而这不是它的主要目的。
    • 嗯。我同意......我只是称之为演员(也许是因为python中没有这样的东西,这是最接近它的)。但也许我真的不应该。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2011-09-23
    • 2013-09-13
    • 2016-01-24
    相关资源
    最近更新 更多