python-3.x 如何删除字符串列表中的元素,如果它们在特定索引处没有特定的字母?

wmvff8tz  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(97)

此问题在此处已有答案

Filtering a list of strings based on contents(5个答案)
How can I collect the results of a repeated calculation in a list, dictionary etc. (or make a copy of a list with each element modified)?(3个答案)
Strange result when removing item from a list while iterating over it in Python(12个回答)
4天前关闭。
我在写一个程序,里面有一个单词列表(在我的程序中很大,但这是一个带有小列表的测试示例),用户输入一个单词(这是一个简化的例子,我已经硬编码了输入单词“安格斯”)和输入单词的索引列表,这些索引指示输入单词应该与列表共享哪些字母,从我的列表中删除不符合这些要求的单词。
在我的例子中,为了简单起见,我使用了索引0,这意味着我希望我的测试列表减少到以输入单词的第一个字母开头的单词,在这种情况下是“a”。请注意,在未来的迭代中,可能需要多个索引,即以“an”开头或以“a”开头并在中间有一个“g”的单词,等等。
我发现列表中满足要求的单词都被测试了,但是我的列表迭代每隔一个单词就测试一次,因此只删除了一半不兼容的单词。
当我将索引改为4(想要以“s”结尾的单词,恰好是最后3个单词)时,它会测试列表中的每一个单词,直到找到我想要的单词,然后依次测试所有这些单词。
我在每个阶段都添加了指纹,这样我就可以更好地看到发生了什么,但它更令人费解。

green_positions_python_list = [0] #list of indeces I want my list and word input to have in common
test_fullwordlist = ['abbey','asken','antar','barke','crent','cnelk','hugus','loges','smars']
word_input = 'angus'
word_input_list = list(word_input)

for i in range(0,len(green_positions_python_list)):
    for word in test_fullwordlist:
        print(f"current word: {word}")
        word_test = list(word)
        print(f"word test: {word_test}")
        position_index = green_positions_python_list[i]
        if word_test[position_index] != word_input_list[position_index]:
            print(f"word to remove: {word}")
            test_fullwordlist.remove(word)

print(f"test fullword list: {test_fullwordlist}")

字符串
输出量:

current word: abbey
word test: ['a', 'b', 'b', 'e', 'y']
current word: asken
word test: ['a', 's', 'k', 'e', 'n']
current word: antar
word test: ['a', 'n', 't', 'a', 'r']
current word: barke
word test: ['b', 'a', 'r', 'k', 'e']
word to remove: barke
current word: cnelk
word test: ['c', 'n', 'e', 'l', 'k']
word to remove: cnelk
current word: loges
word test: ['l', 'o', 'g', 'e', 's']
word to remove: loges

test fullword list: ['abbey', 'asken', 'antar', 'crent', 'hugus', 'smars']


正如你所看到的,它测试了所有的“a”字,然后剩下的每一个字,意味着一些应该被删除,留在列表中。
我想要的输出:

test fullword list: ['abbey', 'asken', 'antar']


提前感谢!

qqrboqgw

qqrboqgw1#

green_positions_python_list = [0] #list of indeces I want my list and word input to have in common
test_fullwordlist = ['abbey','asken','antar','barke','crent','cnelk','hugus','loges','smars']
word_input = 'angus'
word_input_list = list(word_input)

def is_shared(w1: str, w2: str, indexes: list):
    for index in indexes:
        if (index >= len(w1)) or (index >= len(w2)) or (w1[index] != w2[index]):
            return False
    return True

res = []

for word in test_fullwordlist:
    if is_shared(word, word_input, green_positions_python_list):
        res.append(word)

# OR
# res = [
#     word
#     for word in test_fullwordlist
#     if is_shared(word, word_input, green_positions_python_list)
# ]

print(f"test fullword list: {res}")

字符串

相关问题