Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改列表列表中的元素以匹配python中的不同列表_Python_Python 2.7_List - Fatal编程技术网

更改列表列表中的元素以匹配python中的不同列表

更改列表列表中的元素以匹配python中的不同列表,python,python-2.7,list,Python,Python 2.7,List,我使用的是Python 2.7,有一个列表: my_list_0 = [ ['X00001', 1123477, 1.25, 'Yes', 'No', 11.53, 3.23, 0.25, 3.0025], ['X00002', 1125251, 0.22, 'Yes', 'No', 22.83, 3.6, 0.5, 0.0012], ['X00003', 1125433, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 12.0014536],

我使用的是Python 2.7,有一个列表:

my_list_0 = [
    ['X00001', 1123477, 1.25, 'Yes', 'No', 11.53, 3.23, 0.25, 3.0025],
    ['X00002', 1125251, 0.22, 'Yes', 'No', 22.83, 3.6, 0.5, 0.0012],
    ['X00003', 1125433, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 12.0014536],
    ['X00003', 1125435, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 12.0014536],
    ['X00003', 1125436, 966.33, 'Yes', 'No', 1.8, 3.8, 0.36, 30.12121],
    ['X00004', 1125437, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 12.0014536],
    ['X00007', 1125438, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 12.0014536],
    ['X00001', 1125439, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 12.0014536],
    ['X00004', 1231254, 1.3, 'Yes', 'No', 21.83, 3.6, 0.5, 1005.000336669],
    ['X00008', 2520250, 54.02, 'Yes', 'No', 1.83, 3.8, 0.01, 82.0000001],
    ['X00005', 3202020, 966.33, 'Yes', 'No', 1.8, 3.8, 0.36, 0.000001200012],
    ['X00006', 3215204, 1.36, 'Yes', 'No', 1.86, 3.65, 0.15, 0.1234565],
    ['X00007', 4561230, 6.33, 'Yes', 'No', 1.83, 66.22, 0.1, 1.1111111],
    ['X00009', 5721365, 1.25, 'No', 'No', 11.53, 3.23, 0.25, 11.1110001],
    ['X00010', 8520525, 6.33, 'Yes', 'No', 1.83, 66.22, 0.1, 20.000156],
    ['X00110', 8520725, 6.33, 'Yes', 'No', 1.83, 66.22, 0.1, 20.000156],
    ['X00010', 8520825, 6.33, 'Yes', 'No', 1.83, 66.22, 0.1, 20.000156],
    ['X00012', 8520123, 966.33, 'Yes', 'No', 1.8, 3.8, 0.36, 30.12121],
    ['X00011', 9536122, 54.01, 'Yes', 'No', 1.83, 3.8, 0.01, 15.2312456],
    ['X00015', 1212021, 0.333, 'No', 'No', 1.83, 3.8, 0.01, 0],
    ['X00015', 1222221, 0.333, 'No', 'No', 1.83, 3.8, 0.01, 0],
    ['X00013', 9654123, 4.1, 'No', 'No', 1.83, 3.8, 0.01, 90.01],
    ['X00014', 2021230, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 0.00001],
    ['X00017', 3322123, 1.23, 'Yes', 'Yes', 1.88, 1.25, 1.12, 0.0002],
    ['X00016', 9531450, 23.15, 'Yes', 'Yes', 1.83, 3.25, 0.12, 30.123],
    ['X00020', 3625252, 1.23, 'Yes', 'No', 1.86, 3.65, 0.15, 0.02123589],
    ['X00009', 5721777, 1.25, 'No', 'No', 11.53, 3.23, 0.25, 11.1110001],
    ['X00018', 1205203, 1.87, 'Yes', 'No', 1.88, 1.25, 1.12, 89.21233456987],
    ['X00019', 1124521, 0.25, 'No', 'No', 2.1, 0.6, 0.03, 12.564897],
    ['X00021', 8952631, 0.25, 'No', 'No', 2.4, 0.6, 0.03, 23.20033],
    ['X00022', 1123458, 0.33, 'Yes', 'Yes', 10.38, 41.11, 0.5, 0.2314582],
    ['X00023', 3236254, 3, 'No', 'Yes', 10.38, 41.11, 0.5, 78.024568],
    ['X00002', 1205323, 1.87, 'Yes', 'No', 1.88, 1.25, 1.12, 32.021348246],
    ['X00024', 1305324, 1.87, 'Yes', 'No', 1.88, 1.25, 1.12, 32.021348246],
    ['X00025', 1245325, 1.87, 'Yes', 'No', 1.88, 1.25, 1.12, 32.021348246],
    ['X00015', 1212444, 0.333, 'No', 'No', 1.83, 3.8, 0.01, 0],
    ['X00015', 1244421, 0.333, 'No', 'No', 1.83, 3.8, 0.01, 0],
    ['X00005', 3332020, 966.33, 'Yes', 'No', 1.8, 3.8, 0.36, 0.000001200012],
    ['X00006', 3555204, 1.36, 'Yes', 'No', 1.86, 3.65, 0.15, 0.1234565],
    ['X00007', 9871230, 6.33, 'Yes', 'No', 1.83, 66.22, 0.1, 1.1111111]
]
我根据索引2到8的值进行分组:

from itertools import groupby
from operator import itemgetter

my_list_0_grouped_by = [
    list(z) for _, z in groupby(sorted(my_list_0), itemgetter(2,3,4,5,6,7,8))
]
现在我想根据组重新标记列表,这意味着“X00000”标签应该替换为新标签,以便每组列表使用相同的标签

新标签将作为新列表创建(但这并不重要)

现在,我想遍历我的\u列表\u 0\u分组\u,并用新的\u标签中的新标签替换旧的“X00000”标签,因此我:

for i in my_list_0_grouped_by:
    for j in i:
        for k in NEW_LABELS:
            j[0] = k
显然,这不起作用,因为我正在用新标签中的最后一个标签替换所有标签。

只需使用来对组和相应标签进行成对并行迭代:

for i, k in zip(my_list_0_grouped_by, NEW_LABELS):
    for j in i:
        j[0] = k 

或者可以使用enumerate获得正确的标签:

for index, i in enumerate(my_list_0_grouped_by):
    for j in i:
        j[0] = NEW_LABELS[index]

这也可以用一种更具python风格的方式使用列表理解来编写:
[[“a”+str(i)]+l[1:]用于i,g in enumerate(my_list\u 0\u grouped\u by)用于l in g]
@Rodrigue,但这将为创建切片(
O(n)
)和连接(
O(n)
)做不必要的额外工作,你说得对,但我的观点是关于清单的理解。如果您担心创建新列表的成本,那么我们可以定义一个函数来更改原始列表中索引0处的值(就像您所做的那样),并从理解中调用它:
l=[在enumerate中为i重命名组(l,i)(在enumerate中为i,g重命名组(我的列表)\u 0\u分组依据)为l in g]
谢谢。您提供的解决方案在我的模拟列表上非常有效。然而,我在现实生活数据中面临一个问题,因为my_list_0_按顺序分组为一个元组列表。当我试图将元组恢复到列表中时,我运行了[[map(list,k)for k in j]for j in my_list\u 0\u grouped\u by]但是,它不起作用,没有任何建议。非常感谢。
for index, i in enumerate(my_list_0_grouped_by):
    for j in i:
        j[0] = NEW_LABELS[index]