在Python for循环中更改列表中项目的值

2024-04-20 03:06:52 发布

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

我创建了一个函数,并向函数传递如下字符串列表: ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'XX']

我用26个值创建了一个变量X;我在下面的代码中将这些值称为“card”(“for card in X”)。在

我正在使用itertools和list comprehensions创建一个字符串列表,以便X中的每个值都被替换为新列表中的“XX”。在

例如:['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'XX']将扩展为['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value1'], ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value2'] etc

我正在创建一个名为tmp的值列表,并使用for循环将“X”值列表(称为card)替换为tmp中的一个项(称为“XX”)。在

 unitoffive = list(itertools.combinations(unit,5))
 newunit = [list(line) for line in unitoffive if 'XX' in line]


 tmp = [[line,card] for line in newunit for card in X]
 for line in tmp:
     line[0][4] = line.pop(line.index(line[1]))
     print line

  for line in tmp:
     print line

我的剧本表现出我无法理解的行为。当第一个for循环中的print line语句被执行时,我看到了预期的修改列表。当调用第二个print line语句时,我看到另一个错误的列表版本。我不能返回并使用tmp,因为它似乎只包含修改它的for循环中的正确值。在

我知道Python列表在for循环中很难修改,我尝试将代码改为在for line in tmp[:]上循环,但这并没有解决我的问题。在

此代码部分中的print line语句按预期打印['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value1'], ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value2'] etc

^{pr2}$

它后面的print line语句打印['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value26'], ['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'value26'] etc


Tags: inhc列表forline语句dccard
1条回答
网友
1楼 · 发布于 2024-04-20 03:06:52

您正在更改[line,card]子列表,并期望tmp列表拥有它们的副本,而不是相同的对象。尝试更改:

for line in tmp:

用于:

^{pr2}$

看看它是否如你所料。在

编辑

似乎这就是您想要的,将其附加到inlist,而不是插入:

>>> line = [['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'XX'], ['value1']]
>>> line[0].append(line.pop()[0])
>>> line
[['CC', 'DC', 'EC', 'FC', 'GC', 'HC', 'XX', 'value1']]
>>> 

相关问题 更多 >