标记额外信息以区分列表中的数字

时间:2015-09-22 10:27:14

标签: python list

在Python中,我有一个按时间顺序排列的结果列表:

results = [2,6,4,5,2,3,1,8,4,4]

但结果来自两台不同的机器。我想对来自每台机器的数据略有不同。

所以也许:

结果= [ 2 ,6,4,5,2, 3 ,1,8, 4 ,4]

其中粗体数字来自机器A而非粗体数字来自机器B.我认为我需要一些如何标记'这些数字以某种方式使代码可以识别它们来自哪台机器。我意识到我可以创建两个单独的列表,但后来我将失去年表。我需要按照它们发生的顺序保留它们。

所以我需要将额外信息标记为结果。有没有标准的方法来做到这一点?

4 个答案:

答案 0 :(得分:2)

如何创建第二个列表,保存第一个列表中每个'tagged'元素的位置,从而保留第一个列表中的顺序?

tagged=[0,5,8]

轻松访问标记元素: tags = [results[i] for i in tagged]

答案 1 :(得分:2)

您的问题有不同的解决方案。

第一个例子

您可以拥有一个元组列表。第一个元素是您的数据,第二个元素是来自数据的机器:(data, machine)

results = [(2,1),(6,2),(4,2),(5,2),(2,2),(3,1),...]

要查看数据,您只需要两个元素

for data, machine in results:
  print("The data is %d from machine %d." % (data, machine))

第二个例子

虽然您可以有两个列表,一个包含数据,另一个包含计算机的ID

results = [2,6,4,5,2,3,1,8,4,4]
machine = [1,2,2,2,2,1,2,2,1,2]

查看数据的代码就像这样简单:

for i, idmach in enumarate(machine):
  print("The data is %d from machine %d." % (results[i], idmach))

那些可能是更加pythonic的方式,但它是一个例子

答案 2 :(得分:1)

保留元组列表而不是左边的元素是数字,右边是来自

的机器编号
results = [(2,0),(6,1),(4,1),(5,1),(2,1),(3,0),(1,1),(8,1),(4,0),(4,1)]

machine0 = [ x for x,y in results if y == 0]
machine1 = [ x for x,y in results if y == 1]

打印(machine0)

[2,3,4]

打印(MACHINE1)

[6,4,5,2,1,8,4]

答案 3 :(得分:1)

如前所述,您可以将数据存储为tuple。如果要从两台不同的计算机获取数据,则可以按如下方式构建结果列表:

import itertools

def machine_a():
    for data_a in [1,5,10,20]:
        yield data_a

def machine_b():
    for data_b in [20,30,50,100,110,120]:
        yield data_b

results = []

for data_a, data_b in itertools.izip_longest(machine_a(), machine_b()):
    if data_a:
        results.append(('a', data_a))

    if data_b:
        results.append(('b', data_b))

for machine, data in results:
    print machine, data

然后会显示以下结果:

a 1
b 20
a 5
b 30
a 10
b 50
a 20
b 100
b 110
b 120

显然,在您的情况下,数据不会简单地交错,但这会告诉您如何在简单的情况下构建列表。