有没有办法将列表中的整数替换为随机来自另一个列表中的字符串?

Is there a way to replace an integer in a list, with a string from another list at random?

提问人:JayDee 提问时间:11/6/2023 更新时间:11/6/2023 访问量:46

问:

我有一个单词列表,这些单词也被分配了一个数值

words = [[Happy,1],[Sad,2],[Anger,3]]

然后,我有两个额外的列表,仅包含单词和整数,在早期的代码中生成

List1 = [Happy,2,3,1,1,Sad,Sad,Anger]
List2 = [1,Sad,Anger,Happy,Happy,2,2,3]

我需要用单词列表中的字符串替换整数。但是,我还需要使 List1 和 List2 的每个索引中的单词不相同。我不能使用随机播放,因为我需要保持顺序。

我正在研究“isintance”作为检查整数并替换它们的一种方式,但我不确定如何处理它的随机元素。

python 字符串 替换 整数 isinstance

评论

1赞 Goku - stands with Palestine 11/6/2023
你的预期产出是多少?
0赞 JayDee 11/6/2023
它可能是这样的: ''' List1 = [快乐,快乐,悲伤,悲伤,愤怒,悲伤,悲伤,愤怒] List2 = [悲伤,悲伤,愤怒,快乐,快乐,快乐,愤怒,悲伤] ''' 其中替换 inters 的字符串在可用字符串之间随机分配。例如,List1 = [快乐,然后 List2=[悲伤或愤怒
1赞 JonSG 11/6/2023
这里的项目编号有什么意义吗?words
0赞 JayDee 11/6/2023
它们只是向你展示它们是如何匹配的,所以例如,当我替换“1”时,它不能是“快乐”,因为它们匹配,它需要替换为随机选择剩余的东西,在这种情况下是“悲伤”或“愤怒”

答:

0赞 ISK 11/6/2023 #1

此代码是否解决了您的问题?

import random
words = [['Happy', 1], ['Sad', 2], ['Anger', 3]]
replacement_strings = ['Excited', 'Depressed', 'Furious']

for item in words:
    if isinstance(item[1], int):
        random_string = random.choice(replacement_strings)
        item[1] = random_string

print(words)
1赞 JonSG 11/6/2023 #2

我最初的尝试是基于一次查看两个列表的两个项目。如果对中的一个或两个成员不是字符串,则找到一个不等于该对中其他项的随机替换。

import random

List1 = ["Happy",2,3,1,1,"Sad","Sad","Anger"]
List2 = [1,"Sad","Anger","Happy","Happy",2,2,3]

## ----------------------
## Find replacement words.
## unless we reshape words to be a dictionary
## there is probably no need to track the "number"
## ----------------------
words = [["Happy",1], ["Sad",2], ["Anger",3]]
valid_words = [p[0] for p in words]
## ----------------------

## ----------------------
## iterate over our pair of lists.
## ----------------------
for index, (l1, l2) in enumerate(zip(List1, List2)):
    ## ---------------------
    ## If item "0" is not a string, find a replacement
    ## ---------------------
    if not isinstance(l1, str):
        List1[index] = random.choice(list(w for w in valid_words if w != l2))
    ## ---------------------

    ## ---------------------
    ## if item "1" is not a string, find a replacement
    ## ---------------------
    if not isinstance(l2, str):
        List2[index] = random.choice(list(w for w in valid_words if w != l1))
    ## ---------------------
## ----------------------

for pair in zip(List1, List2):
    print(pair)

这将为您提供类似的东西:

('Happy', 'Sad')
('Anger', 'Sad')
('Happy', 'Anger')
('Anger', 'Happy')
('Anger', 'Happy')
('Sad', 'Happy')
('Sad', 'Anger')
('Anger', 'Happy')

请注意,这会“就地”更新两个列表,如果您不想改变这些列表,我们将需要一组稍微不同的代码来构建两个新列表。然而,逻辑基本相同。append()