如何随机替换列表中的整数为指定字符串且同索引元素不同?
解决方案
步骤1:构建映射关系
先把单词-数值列表转换成数值到单词的字典,同时整理出所有单词的列表,方便后续快速查找和随机选择:
import random # 原始单词-数值关联列表 words = [["Happy", 1], ["Sad", 2], ["Anger", 3]] # 构建数值到单词的映射字典 num_to_word = {num: word for word, num in words} # 整理所有单词的列表,用于随机备选 all_words = [word for word, num in words]
步骤2:遍历处理两个列表
逐个遍历两个列表的对应位置元素,先把整数替换为对应单词,再检查同位置元素是否重复,重复则随机替换其中一个为其他单词:
List1 = ["Happy", 2, 3, 1, 1, "Sad", "Sad", "Anger"] List2 = [1, "Sad", "Anger", "Happy", "Happy", 2, 2, 3] result_list1 = [] result_list2 = [] for item1, item2 in zip(List1, List2): # 处理List1的当前元素:整数转对应单词,字符串直接保留 processed1 = num_to_word[item1] if isinstance(item1, int) else item1 # 处理List2的当前元素:逻辑同上 processed2 = num_to_word[item2] if isinstance(item2, int) else item2 if processed1 != processed2: # 同位置元素不同,直接加入结果 result_list1.append(processed1) result_list2.append(processed2) else: # 同位置元素重复,随机选一个不等于当前值的单词替换其中一个(这里替换List1的元素) available = [w for w in all_words if w != processed1] processed1 = random.choice(available) result_list1.append(processed1) result_list2.append(processed2) # 输出结果 print("处理后的List1:", result_list1) print("处理后的List2:", result_list2)
关键说明
- 用
isinstance(item, int)准确判断整数元素,完成基础替换 - 当同位置元素重复时,从所有单词中筛选出不等于当前值的备选列表,用
random.choice()随机选一个替换,避免重复 - 全程保留原列表的元素顺序,没有使用
shuffle方法
内容的提问来源于stack exchange,提问作者JayDee
相关产品推荐
相关产品推荐

