我试图比较python中字符串中的单个字符,我不知道该怎么做。在字符串文件中,所有字符串都属于组,我想确定组中75%的字符串在给定位置是否具有相同的字符,如果是,则删除与原始字符串进行比较的所有字符串。
我正在思考以下内容,比较单词big / bug中的char2:
count=0
group1_big
group1_big
group1_bigs
group1_bugs
group2_bug
for(string in file)
if(chars 1-7 of string == chars 1-7 of next string & char 9 is the same in both words)
if(75% are the same at position 9)
delete all other strings in the same group
在这种情况下,如果我们比较字符1-7,所有group1匹配,75%具有'i'
字符位置9删除除第一个之外的所有字符。导致以下文件输出:
group1_big
group2_bug
答案 0 :(得分:1)
>>> s="""group1_big
... group1_big
... group1_bigs
... group1_bugs
... group2_bug"""
>>> d={}
>>> for i in s.split('\n') :
... d.setdefault(i[:7],[]).append(i)
...
>>> from collections import Counter
>>> count={len(j):Counter([t[8] for t in j]).most_common() for i,j in d.items()}
>>> final_count=[next((t[0] for t in j if t[1]>=0.75*i),j) for i,j in count.items()]
>>> words=[next((t for t in v if t[8] in final_count),None) for v in d.values()]
>>> words
['group2_bug', 'group1_big']
这是我的第一次尝试,我认为可以做得更好。
在第一部分中,您可以创建如下字典:
>>> for i in s.split('\n') :
... d.setdefault(i[:7],[]).append(i)
>>> d
{'group2_': ['group2_bug'], 'group1_': ['group1_big', 'group1_big', 'group1_bigs', 'group1_bugs']}
然后使用d
创建一个字典,从collections.Counter
的值的第9个字符开始计算,并将单词的长度作为关键字:
>>> count
{1: [('u', 1)], 4: [('i', 3), ('u', 1)]}
然后使用以下列表理解找到符合您条件的最后第9个字符:
final_count=[next((t[0] for t in j if t[1]>=0.75*i),j) for i,j in count.items()]
>>> final_count
['u', 'i']
最后使用列表理解
从d
的值中获取最终单词
>>> words=[next((t for t in v if t[8] in final_count),None) for v in d.values()]
>>> words
['group2_bug', 'group1_big']