我的代码在这里有什么问题(Python,列表,字符串)?

时间:2019-02-20 21:55:17

标签: python string list loops split

我正在遍历长度为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

2 个答案:

答案 0 :(得分:2)

这个问题很难理解,因为您没有定义ax

尽管如此,问题几乎可以肯定是您每次都修改并附加相同的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"]