更改列表中的特定索引

时间:2018-06-30 16:48:56

标签: python python-3.x list

说我有一个列表:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

有什么办法也可以将列表的前4个值取出来:

[4, 2, 2, 4]

并将它们放回列表中,因此列表现在看起来像

[4, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

而无需列出所有列表

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

在一开始。

如果可能的话,您是否可以循环执行所有4个可用值的操作。

因此列表现在看起来像:

[4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4] 

7 个答案:

答案 0 :(得分:1)

只要这样做:

lis1 = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
# change first 4 index
lis1[:4] = 4,2,2,4
print(lis1)
# [4, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]    

lis2 = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
# change every 4 index in loop
for i in range(0,len(lis2),4):
    lis2[i:i+4] = 4,2,2,4
print(lis2)
# [4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]

答案 1 :(得分:1)

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
fill = [4, 2, 2, 4]
for i in range(0, len(lis), len(fill)):
    lis[i : i + len(fill)] = fill
print(lis)

这将输出:

[4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]

答案 2 :(得分:1)

使用 itertools.cycle itertools.islice

from itertools import cycle, islice

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

out = list(map(int, islice(cycle('4224'), len(lis))))
print(out)

# [4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]

或更简单的方式(没有任何导入):

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

out = list(map(int, '4224' * (len(lis) // 4)))
print(out)

# [4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]

答案 3 :(得分:0)

def list_function(original_list, list_of_value_to_subst):
    original_list[:len(list_of_value_to_subst)]=list_of_value_to_subst

    print (original_list)

    subst_list = list(map(int, list_of_value_to_subst * (len(original_list) // len(list_of_value_to_subst))))

    print (subst_list)


lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
list_of_value_to_subst=[4, 2, 2, 4]

list_function(lis, list_of_value_to_subst)

输出:

[4, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]

答案 4 :(得分:0)

另一种解决方案是执行以下操作:

第一个问题:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

ins = [4, 2, 2, 4]

lis[:len(ins)] = ins

print(lis)

输出:

[4, 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

第二个问题:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

lis = ins * int(len(lis) / len(ins))

print(lis)

输出:

[4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4]

答案 5 :(得分:0)

给出您要用以下内容替换lis的第一部分的数字列表:

replace_lis = [4, 2, 2, 4]

您可以遍历replace_lis的长度,并相应地填写lis中的索引点:

for i in range(len(replace_lis)):
    if i < len(lis):
        lis[i] = replace_lis[i]

i < len(lis)replace_lis可以大于lis。如果没有机会,则可以安全地省略该if语句。

答案 6 :(得分:0)

这是您的原始列表:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]

,您想将前4个项目替换为: [4,2,2,4]

让我们为新值分配一个新变量。我们称之为更新。所以:

update = [4, 2, 2, 4]

这是您的代码:

lis = [0, 0, 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 0]
update = [4, 2, 2, 4]

for i in range(0, len(update)):
     lis[i] = update[i]

print(lis)