我正在遍历长度为x的列表“ a”,其中如果第1列有多个换行符,我想复制整个行x并复制它,但是第1列具有唯一值。
例如,如果我有一行并且第1列包含值(A,B,C),则我想复制所有其他数据,并使其在第1列中仅包含1个值。
steps = []
temp = a[x]
if a[x][1].count('\n') == 0:
steps.append(temp)
else:
split = a[x][1].split('\n')
count = a[x][1].count('\n')+1
for b in range(0, count):
temp[1] = split[b]
steps.append(temp)
列表“步骤”的预期结果:
xxx, A, yyy, zzz
xxx, B, yyy, zzz
xxx, C, yyy, zzz
实际结果:
xxx, C, yyy, zzz
xxx, C, yyy, zzz
xxx, C, yyy, zzz
答案 0 :(得分:2)
这个问题很难理解,因为您没有定义a
或x
。
尽管如此,问题几乎可以肯定是您每次都修改并附加相同的temp
格。您需要复制它:
new_temp = temp.copy()
new_temp[1] = split[b]
steps.append(new_temp)
答案 1 :(得分:0)
那是因为Python列表是可变的,并且您总是在修改同一列表。
当您这样做:
steps.append(temp)
在每次迭代中,您都将相同的列表(temp
)添加到结果列表steps
中。
就像在每次迭代中一样,您在执行时正在修改列表temp
的第二个元素
temp[1] = split[b]
结果steps
列表将修改其每个元素(因为它们都是相同的元素)。
说明:
第1步
b = 0
split[b] = A
temp[1] = split[b] -> temp = "xxx, A, yyy, zzz"
steps = [temp] === ["xxx, A, yyy, zzz"]
第2步
b = 1
split[b] = B
temp[1] = split[b] -> temp = "xxx, B, yyy, zzz"
steps = [temp, temp] === ["xxx, B, yyy, zzz", "xxx, B, yyy, zzz"]
第3步
b = 2
split[b] = C
temp[1] = split[b] -> temp = "xxx, C, yyy, zzz"
steps = [temp, temp, temp] === ["xxx, C, yyy, zzz", "xxx, C, yyy, zzz", "xxx, C, yyy, zzz"]