如何使我的第二个列表以正确的词序出现?

2024-06-26 14:24:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python3.4。你知道吗

这是我的密码:

varSentence = input("What sentence would you like to convert to numbers?" )

varList = varSentence.split()
print (varList)
varList2 = list(set(varList))
print (varList2)

for varCount, varWord in enumerate(varList2):

    for varWord2 in varList:

        if varWord2 == varWord:
            varWord2 = varCount
            print (varCount + 1)

输入:

varSentence = "this is a test for stack over flow this is a test for stack overflow"

varList = varSentence.split()
 varList2  = ['this', 'is', 'a', 'test', 'for', 'stack', 'over', 'flow', 'overflow']

预期产量:

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8, 9]

Tags: tointestforisstackthissplit
2条回答

我认为您只需要将单词从varList添加到varList2(如果它们还不存在),然后在varList2中打印它们的排名。您可以一次完成所有操作:

varSentence = input("What sentence would you like to convert to numbers?" )

varList = varSentence.split()
print (varList)
varList2 = []
ranks = []

for word in varList:
    if word in varList2:
        i = varList2.index(word)
        ranks.append(i+1)
    else:
        varList2.append(word)
        ranks.append(len(varList2))

print varList2
for i in rank:
    print rank

如果要保持原始列表中元素的顺序,请使用OrderedDict:

from collections import OrderedDict
varList2 = list(OrderedDict.fromkeys(varList))
# -> ['this', 'is', 'a', 'test', 'for', 'stack', 'over', 'flow', 'overflow']

根据您的预期输出,结合Counterdict将是最好的方法,将counts * ind添加到列表中,下面为您提供一个O(n)解决方案,而不是您自己的二次方法:

varList = [ 'this', 'is', 'a', 'test', 'for', 'stack', 'over', 'flow', 'this', 'is', 'a', 'test', 'for', 'stack', 'overflow']


from collections import OrderedDict, Counter
counts = Counter(varList)
od = OrderedDict.fromkeys(varList, 0)
res = []
for ind, k in enumerate(od, 1):
    res.extend([ind] *  counts[k])

print(res)

输出:

[1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 8, 9]

如果只想打印输出,只需删除列表:

for ind, k in enumerate(od, 1):
    print(*[ind]*v,end=" ")

输出:

1 1 2 2 3 3 4 4 5 5 6 7 8 8 9

相关问题 更多 >