在Python中,我有一个按时间顺序排列的结果列表:
results = [2,6,4,5,2,3,1,8,4,4]
但结果来自两台不同的机器。我想对来自每台机器的数据略有不同。
所以也许:
结果= [ 2 ,6,4,5,2, 3 ,1,8, 4 ,4]
其中粗体数字来自机器A而非粗体数字来自机器B.我认为我需要一些如何标记'这些数字以某种方式使代码可以识别它们来自哪台机器。我意识到我可以创建两个单独的列表,但后来我将失去年表。我需要按照它们发生的顺序保留它们。
所以我需要将额外信息标记为结果。有没有标准的方法来做到这一点?
答案 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
显然,在您的情况下,数据不会简单地交错,但这会告诉您如何在简单的情况下构建列表。