Python - 将具有不规则长度的不同列表中的元素匹配到新列表

时间:2017-07-14 14:23:15

标签: python

嘿,这可能很简单,但我被卡住了...我有3个不同的列表,我想以某种方式匹配,但我不能接缝以使其正确。 RDBID是将字符串彼此分开的索引(ex 1636 19 02 2F has RDBID 1) byte是字符串具有(ex 1636=0 19=1 02=2 2F=3)的顺序的nr,hex是字符串我必须从中排序。我的问题是一些hex字符串比其他字符串长,所以我得不到正确的输出,所以我需要以某种方式计算byte然后我应该从{{1}中取出多少元素并且同时用RDBID ..

索引每个字节+十六进制

我尝试为每个列表分别单独hex,然后将所有内容附加到新列表中,不起作用...尝试以相同的方式创建3 for loop但是每个值都打印在单独的线...尝试搜索元素模式,但也没有工作......我完全被卡住了

nested loop

为什么我想以这种方式存储是因为我稍后会将它写入我的Access Sql服务器 所以现在我要求一些帮助,谢谢

2 个答案:

答案 0 :(得分:1)

使用以下代码,您可以获得所期望的内容:

RDBID = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
byte = (0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6)
hex = ('1636', '19', '02', '2F', '1637', '19', '02', '2F', '1631', '19', '02', '2F', '1637', '19', '04', '0A', '1B', '47', 'FF', '1637', '19', '04', '06', '07', '68', 'FF', '1637', '19', '04', '06', '0A', '82', 'FF', '1637', '19', '04', '0A', '78', '56', 'FF','1637', '19', '04', '0A', '78', '56', 'FF', '1637', '19', '04', '0A', '1B', '08', 'FF', '1637', '19', '04', '0A', '1B', '81', 'FF')

zipByteHex = zip(byte,hex)

result = list()
i = -1
for bh in zipByteHex:
    if bh[0]==0:
        i+=1
    result.append((RDBID[i],)+bh)

结果如下:

>>> result
[(1, 0, '1636'),
 (1, 1, '19'),
 (1, 2, '02'),
 (1, 3, '2F'),
 (2, 0, '1637'),
 (2, 1, '19'),
 (2, 2, '02'),
 (2, 3, '2F'),
 (3, 0, '1631'),
 (3, 1, '19'),
 (3, 2, '02'),
 (3, 3, '2F'),
 (4, 0, '1637'),
 (4, 1, '19'),
 (4, 2, '04'),
 (4, 3, '0A'),
 (4, 4, '1B'),
 (4, 5, '47'),
 (4, 6, 'FF'),
 (5, 0, '1637'),
 (5, 1, '19'),
 (5, 2, '04'),
 (5, 3, '06'),
 (5, 4, '07'),
 (5, 5, '68'),
 (5, 6, 'FF'),
 (6, 0, '1637'),
 (6, 1, '19'),
 (6, 2, '04'),
 (6, 3, '06'),
 (6, 4, '0A'),
 (6, 5, '82'),
 (6, 6, 'FF'),
 (7, 0, '1637'),
 (7, 1, '19'),
 (7, 2, '04'),
 (7, 3, '0A'),
 (7, 4, '78'),
 (7, 5, '56'),
 (7, 6, 'FF'),
 (8, 0, '1637'),
 (8, 1, '19'),
 (8, 2, '04'),
 (8, 3, '0A'),
 (8, 4, '78'),
 (8, 5, '56'),
 (8, 6, 'FF'),
 (9, 0, '1637'),
 (9, 1, '19'),
 (9, 2, '04'),
 (9, 3, '0A'),
 (9, 4, '1B'),
 (9, 5, '08'),
 (9, 6, 'FF'),
 (10, 0, '1637'),
 (10, 1, '19'),
 (10, 2, '04'),
 (10, 3, '0A'),
 (10, 4, '1B'),
 (10, 5, '81'),
 (10, 6, 'FF')]

zip函数做了一些工作,避免你再做一次额外的循环。

答案 1 :(得分:0)

似乎您提供的信息很少,只有hex变量中包含任何有用的数据。那么,为什么不是这样的呢?

RDBID = 1
_byte = 0
for s in hex:
    print (RDBID, _byte, s)
    if byte >= 3:
        byte = 0
        RDBID += 1
    else:
        byte += 1