如果 if 语句为 true,则扩展和替换



我有一个tupleslist,我只想制作一个简单的嵌套循环,其中包含一个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)

试图使其尽可能接近原始代码。 希望这有帮助!

最新更新