用另一个列表中的值替换列表中的特定值

时间:2019-06-21 14:42:42

标签: python python-3.x list

我的python代码中有两个列表:     list_1 = [1,'是',3,'否',5,'是',7]和     list_2 = ['a','b','c']

我想将list_2的值插入到list_1的“是”或“否”。

我已经尝试过通过获取list_1的索引值并尝试插入list_2来进行类似的操作,但这没有用。

list_1 = [1, 'Yes', 3, 'No', 5, 'yes', 7]
list_2 = ['a', 'b', 'c']

for (each, i) in zip(list_2, range(len(list_1))):
    if list_1 == 'yes' or list_1 == 'no':
        list_1.insert(i, each)

for each in list_1:
    print(each)

我只有list_1的输出,我想要这样的最终列表     f_list = [1,'a',3,'b',5,'c',7] 我该如何实现?

5 个答案:

答案 0 :(得分:3)

在当前方法中,您正在将列表与条件yes中的noif list_1 == 'yes' or list_1 == 'no':进行比较,这是行不通的,因此if条件永远不会满足,并且{{1 }}保持不变

使用for循环的一种简单方法是在list_1中查找yesno,找到后将其替换为list_1的元素,然后递增指向list_2

的下一个元素的计数器
list_2

输出将为

list_1 = [1, 'Yes', 3, 'No', 5, 'yes', 7]
list_2 = ['a', 'b', 'c']

#variable to keep track of elements of list_2
index = 0

#Iterate through indexes and item of list_1 using enumerate
for idx, item in enumerate(list_1):

    #If an item in list_1 matches yes or no
    if str(item).lower() in ['yes', 'no']:

        #Replace that item with item in list_2
        list_1[idx] = list_2[index]

        #Move to next item in list_2
        index+=1

print(list_1)

答案 1 :(得分:3)

list_2转换为迭代器。然后,您可以有选择地使用list_1的值或list_2的迭代器中的下一个元素来构建新列表。

it = iter(list_2)
[next(it) if str(x).lower() in {'yes', 'no'} else x for x in list_1]
# [1, 'a', 3, 'b', 5, 'c', 7]

如果list_1中“ yes” /“ no”元素的数量大于list_2中元素的数量,那么您可以使用函数用{填充值(例如list_2

None

答案 2 :(得分:1)

您可以使用列表推导来遍历每个元素,并在需要时从list_2中弹出一个元素。

list_1 = [1, 'Yes', 3, 'No', 5, 'yes', 7]
list_2 = ['a', 'b', 'c']

list_2_vals = list_2[::-1] # So we don't modify the original list_2

# Creates a new list_1 with the values we want
list_1_new = [list_2_vals.pop() if str(x).lower() in ['yes', 'no'] else x for x in list_1]

print(list_1_new)

答案 3 :(得分:0)

熊猫可以做到这一点:

import pandas as pd
list_1 = [1, 'Yes', 3, 'No', 5, 'yes', 7]
list_2 = ['a', 'b', 'c']

df_1 = pd.Series(list_1)
df_1 = df_1.replace('Yes', list_2[0])
df_1 = df_1.replace('No', list_2[1])
df_1 = df_1.replace('yes', list_2[2])

f_list = df_1.values.tolist()
print(f_list)

答案 4 :(得分:0)

list_1 = [1, 'Yes', 3, 'No', 5, 'yes', 7]
list_2 = ['a', 'b', 'c']

idx_list = [idx for idx, x in enumerate(list_1) if isinstance(x,basestring) and x.lower() in ['yes', 'no']]
for idx, val in zip(idx_list, list_2):
    list_1[idx] = val
print(list_1)

输出

[1, 'a', 3, 'b', 5, 'c', 7]