将一个列表的元素多次映射到第二个lis的元素

2024-05-12 08:59:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表,我想将它们相互映射,但是一个列表包含1个以上的元素。所以我把它们拉在一起,但不能正常工作。在

列表如下:

a = ['TEMP', 'TEMP,PRE', 'TEMP,HUM,RAN', 'HUM']
b = ['TEM', 'BAR', 'BAO', 'RAI']

我正在努力做到:

^{pr2}$

我想把b的每一项映射到a,但是在a中有更多的值用,分隔

我的代码如下:

import csv


mod1 = []
dev2 = []
d = {}
with open('/home/robi/Desktop/rob/device.csv', 'rb') as f:
    next(f, None)
    reader = csv.reader(f, delimiter=';')
    for row in reader:
        mod1.append(row[0])
        dev2.append(row[1])

    a = zip(dev2, mod1)
    for it, key in a:
        print it + '.' + key

但我得到的结果是:

BAO.TEMP,HUM,RAN
BAR.TEMP,PRE
RAI.HUM

因此BAR和{}没有正确映射。在


Tags: csvin列表fordev2barpretemp
3条回答

使用list comprehension和{}(假设a和b的长度相同)

a = ['TEMP', 'TEMP,PRE', 'TEMP,HUM,RAN', 'HUM']
b = ['TEM', 'BAR', 'BAO', 'RAI']
length = len(a)

result = ['.'.join((b[index],sub_item) ) 
              for index in range(length) for sub_item in a[index].split(',')]

这似乎比使用zip所花的时间要少一些)

zip使用list索引,因此它无法根据您的条件识别特定项中是否有更多项。您需要做一些后处理来构建结束列表,即用逗号将第一个列表中的元素拆分,然后将每个元素与第二个列表中的元素组合起来。比如:

a = ['TEMP', 'TEMP,PRE', 'TEMP,HUM,RAN', 'HUM']
b = ['TEM', 'BAR', 'BAO', 'RAI']

c = ["%s.%s"%(e[1],i) for e in zip(a, b) for i in e[0].split(",")]
# ['TEM.TEMP', 'BAR.TEMP', 'BAR.PRE', 'BAO.TEMP', 'BAO.HUM', 'BAO.RAN', 'RAI.HUM']

最后试试这个:

a = zip(dev2, mod1)
for it, key in a:
    words = key.split(',')
    for word in words:
        print it + '.' + word

相关问题 更多 >