在Python中随机反转列表列表中的一半单词

Posted

技术标签:

【中文标题】在Python中随机反转列表列表中的一半单词【英文标题】:Reversing half the words in a list of lists randomly in Python 【发布时间】:2022-01-20 01:04:03 【问题描述】:

我有一长串列表words_lists,其中包含特定文档的单词标记(也包含重复项),还有一个包含words_list 中的一些单词的子列表

我正在尝试在 words_list 中反转 EXACTLY HALF 子列表 RANDOMLY 中出现的单词(所以不仅仅是反转单词的前半部分等),请注意word_list 应该保持相同的顺序。

这是我目前所拥有的:


words_list = [['test', 'hello'] ,['world', 'what', 'favourite'],['test',...]..]
sublist = ['test','world']

import random
out = [w[::-1] if w in sublist and random.choice([True, False]) else w
       for w in words_list]

它工作得相当好,但为了准确起见,我希望 EXACTLY 一半的事件被反转。

我创建了一些代码(见下文),它对包含大小为 occurrances 的 True 或 False 的列表进行洗牌,但我无法理解如何在原始列表中使用它理解循环,谁能帮忙

 
        decisions = []
        for i in range(occurrences):
            if i < occurrences/2:
                decisions.append(True)
            else:
                decisions.append(False)
        
        random.shuffle(decisions)

【问题讨论】:

因为words_list 是一个列表列表,所以w 是一个列表,而不是一个单词。 if w in sublist 如何找到匹配项? 【参考方案1】:

列出word_list 中所有在sublist 中的单词的索引。使用random.sample() 随机选择这些索引的一半。然后用这些索引反转原始列表的元素。

indexes = [i for i, w in enumerate(words_list) if w in sublist]
random_half = set(random.sample(indexes, len(indexes)//2))
out = [w[::-1] if i in random_half else w for i, w in enumerate(words_list)]

【讨论】:

以上是关于在Python中随机反转列表列表中的一半单词的主要内容,如果未能解决你的问题,请参考以下文章

python如何查找两个文本文件之间的所有单词匹配

自动更正python列表中的单词

Python - 将字符列表与单词列表进行比较?

解析python中的单词列表

删除列表中包含部分单词的 Python 列表中的元素

在 Python 中使用正则表达式查找和替换文件中的单词列表