Jes*_*ABI 4 python string list
我有一个字符串列表:mylist = ["Hanks", "Tom Hanks","Tom","Tom Can"],我需要删除作为列表中另一个字符串的子字符串的较短字符串。
例如,在上述情况下,输出应为:[“Tom Hanks”,“Tom Can”]。
我在 python 中做了什么:
mylist = ["Hanks", "Tom Hanks","Tom","Tom Can"]
newlst = []
for x in mylist:
noexist = True
for j in mylist:
if x==j:continue
noexist = noexist and not(x in j)
if (noexist==True):
newlst.append(x)
print(newlst)
Run Code Online (Sandbox Code Playgroud)
该代码运行良好。我怎样才能让它变得高效?
如果输出中的顺序并不重要(将','字符替换为列表字符串中未出现的字符):
mylist = ["Hanks", "Tom Hanks","Tom","Tom Can"]
mylist.sort(key = len)
newlst = []
for i,x in enumerate(mylist):
if x not in ','.join(mylist[i+1:]):
newlst.append(x)
Run Code Online (Sandbox Code Playgroud)
列表理解替代方案(可读性较差):
mylist = ["Hanks", "Tom Hanks","Tom","Tom Can"]
mylist.sort(key = len)
newlst = [x for i,x in enumerate(mylist) if x not in ','.join(mylist[i+1:])]
Run Code Online (Sandbox Code Playgroud)
输出:
['Tom Can', 'Tom Hanks']
Run Code Online (Sandbox Code Playgroud)
如果你想保留订单:
mylist = ["Hanks", "Tom Hanks","Tom","Tom Can"]
mylist_sorted = mylist.copy()
mylist_sorted.sort(key = len)
newlst = [x for i,x in enumerate(mylist_sorted) if x not in ','.join(mylist_sorted[i+1:])]
newlst = [x for x in mylist if x in newlst]
Run Code Online (Sandbox Code Playgroud)
输出:
['Tom Hanks', 'Tom Can']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
911 次 |
| 最近记录: |