用一个列表中的所有元素替换一个列表中的元素

时间:2019-11-06 04:11:41

标签: python list

我在给定索引下将一个列表拼接到另一个列表时遇到麻烦。 想法是这样的:

“对于主列表中的每个单词,如果该单词为X,则将其替换为辅助列表中的所有单词。”

这是一个例子。它将辅助列表以正确的索引插入到主列表中:

        public async Task<List<Client>> GetAllClients()
        {
            return await database.Table<Client>().OrderBy(c => c.FirstName).ToListAsync();
        }

理想的输出是:

primary_list = ['the', 'black', 'cat', 'jumped']
secondary_list = ['big', 'grey']

for i, word in enumerate(primary_list):
    if word == "black":
        primary_list[i] = secondary_list

primary_list 
>> ['the', ['big', 'grey'], 'cat', 'jumped']

我也尝试过列表理解:

['the', 'big', 'grey', 'cat', 'jumped']

不仅多余,而且与上面的功能相同。

这里还有其他一些使用列表切片的答案,但是我不确定如何在语法中使用它们。有想法吗?

6 个答案:

答案 0 :(得分:0)

以下是使用中间result列表的选项:

>>> primary_list = ['the', 'black', 'cat', 'jumped']
>>> secondary_list = ['big', 'grey']
>>> result = []
>>> for word in primary_list:
...   if word == "black":
...     result += secondary_list
...   else:
...     result.append(word)
... 
>>> result
['the', 'big', 'grey', 'cat', 'jumped']

答案 1 :(得分:0)

您的代码中的问题是由于以下行中的两个原因:

  1. 尝试将列表分配给primary_list中的特定元素。
  2. 不使用secondary_list.copy()

如果您多次出现'black',则这将copy在那里的次要列表。如果其中任何一个更改,则稍后将更改其他共享的位置,因为它们将共享相同的内存位置。

primary_list[i] = secondary_list
  

这是解决方案。

final_list = list()
for word in primary_list:
    if word=='black':
        final_list += secondary_list.copy()
    else:
        final_list.append(word)

final_list

输出

['the', 'big', 'grey', 'cat', 'jumped']

答案 2 :(得分:0)

您应该创建另一个列表,并添加引物列表元素和辅助列表元素。

primary_list = ['the', 'black', 'cat', 'jumped']
secondary_list = ['big', 'grey']
result_list=[]
for i, word in enumerate(primary_list):
    if word == "black":
        for secod_val in secondary_list:
            result_list.append(second_val)
    else:
        result_list.append(word)

答案 3 :(得分:0)

使用切片的简单方法。

>>> a = [1, 2, 3, 7, 8]
>>> b = [4, 5, 6]
>>> a[3:3] = b
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]

答案 4 :(得分:0)

primary_list = ['the', 'black', 'cat', 'jumped']
secondary_list = ['big', 'grey']

for i, word in enumerate(primary_list):
    if word == "black":
        primary_list[i:len(secondary_list)] = secondary_list

print(primary_list)

['the', 'big', 'grey', 'cat', 'jumped']

答案 5 :(得分:0)

另一个使用字符串的选项:

primary_list = ['the', 'black', 'cat', 'jumped']
secondary_list = ['big', 'grey']
for i in range(len(primary_list)):
    if primary_list[i] == 'black':
        primary_list[i] = secondary_list

final_list = repr(primary_list).replace('[', '').replace(']', '').replace("'", '').split(', ')
print(final_list)

输出:

['the', 'big', 'grey', 'cat', 'jumped']