我有一个tuples
list
,我只想制作一个简单的嵌套循环,其中包含一个if语句,如果它是True
它应该替换列表中的现有元组。我已经制作了这样它同时写新元组和旧元组,我无法摆脱旧元组。
list_byte = [(1, 1, 0, '0x1636'), (1, 1, 1, '0x19'), (1, 1, 2, '0x02'), (1, 1, 3, '0x2F'), (1, 2, 0, '0x1637')]
result = (2, '0x02', 'LEV'), (2, '0x19', 'RD'), (2, '0x1636', 'IMG'),(2, '0x1637', 'IEM')
t = []
for x in list_byte:
print(x)
for y in result:
#print(y)
if y[:2] == x[2:]:
#print(y[:2],'-')
t.extend([x+y[1:]])
t.append(x)
现在如何打印:
(1, 1, 0, '0x1636', '0x1636', 'IGM')
(1, 1, 0, '0x1636')
(1, 1, 1, '0x19', '0x19', 'RD')
(1, 1, 1, '0x19')
(1, 1, 2, '0x02', '0x02', 'LEV')
(1, 1, 2, '0x02')
(1, 1, 3, '0x2F')
(1, 2, 0, '0x1637', '0x1637', 'IEM')
(1, 2, 0, '0x1637')
我尝试使用 else:在 if 之后,但随后循环变得疯狂并在奇怪的续集中打印每个值......这是我得到的壁橱。
我想要它现在如何打印:
(1, 1, 0, '0x1636', '0x1636', 'IGM')
(1, 1, 1, '0x19', '0x19', 'RD')
(1, 1, 2, '0x02', '0x02', 'LEV')
(1, 1, 3, '0x2F')
(1, 2, 0, '0x1637', '0x1637', 'IEM')
经过一些实验后设法运行此代码。用Python 3.6编写。(如果您使用的是Python 2.x,只需将print(i)
替换为print i
即可。
修订后的守则
list_byte = [(1, 1, 0, '0x1636'), (1, 1, 1, '0x19'), (1, 1, 2, '0x02'), (1, 1, 3, '0x2F'), (1, 2, 0, '0x1637')]
result = (2, '0x02', 'LEV'), (2, '0x19', 'RD'), (2, '0x1636', 'IMG'),(2, '0x1637', 'IEM')
t = []
for x in list_byte:
line = x
for y in result:
if y[1] == x[3]:
line = x + y[1:]
t.append(line)
for i in t: print(i)
控制台输出:
(1, 1, 0, '0x1636', '0x1636', 'IMG')
(1, 1, 1, '0x19', '0x19', 'RD')
(1, 1, 2, '0x02', '0x02', 'LEV')
(1, 1, 3, '0x2F')
(1, 2, 0, '0x1637', '0x1637', 'IEM')
我有一个元组列表,我只想制作一个简单的嵌套循环,它有一个 if 语句,如果它是 True,它应该替换列表中的现有元组
下面的最小示例是您想要的吗?
mylist = [(1,'a'), (2,'b'), (3,'c')]
print(mylist)
for it in range(len(mylist)):
if mylist[it][1]=='b':
mylist[it] = (42, 'foo')
print(mylist)
>> [(1, 'a'), (2, 'b'), (3, 'c')]
>> [(1, 'a'), (42, 'foo'), (3, 'c')]
在线试用!
你试过使用过滤器吗?
这样:
for i in filter(lambda x: x in [y for y in result if y[:2] == x[2:]] , list_byte):
print(i)
基本上,如果在满足条件的result
中找到元组,则 lambda 函数返回 truey[:2] == x[2:]
可能需要一些调整才能使其正常工作
list_byte = [(1, 1, 0, '0x1636'), (1, 1, 1, '0x19'), (1, 1, 2, '0x02'),(1,
1, 3, '0x2F'), (1, 2, 0, '0x1637')]
result = (2, '0x02', 'LEV'), (2, '0x19', 'RD'), (2, '0x1636', 'IMG'),(2,
'0x1637', 'IEM')
t = []
for x in list_byte:
for y in result:
if y[:2] == x[2:]:
x = x + y[1:]
t.append(x)
试图使其尽可能接近原始代码。 希望这有帮助!