是否有更多 Pythonic 方法可以從串列中洗掉所有重復元素,同時保留第一個和最后一個元素?
lst = ["foo", "bar", "foobar", "foo", "barfoo", "foo"]
occurence = [i for i, e in enumerate(lst) if e == "foo"]
to_remove = occurence[1:-1]
for i in to_remove:
del lst[i]
print(lst) # ['foo', 'bar', 'foobar', 'barfoo', 'foo']
我更喜歡的另一種方法。
for i, e in enumerate(lst[1:-1]):
if e == "foo":
del lst[i 1]
uj5u.com熱心網友回復:
您可以使用 Python 的 set 資料結構和切片來根據您的要求構建一個新串列,如下所示:
lst = ["foo", "bar", "foobar", "foo", "barfoo", "foo"]
new_lst = [lst[0]] list(set(lst[1:-1])) [lst[-1]]
uj5u.com熱心網友回復:
試試下面:
lst = ["foo", "bar", "foobar", "foo", "barfoo", "foo"]
first, last = lst[0], lst[-1]
seen = {first, last}
seen_add = seen.add
inner = (s for s in lst[1:-1] if not (s in seen or seen_add(s)))
result = [first, *inner, last]
結果:
['foo', 'bar', 'foobar', 'barfoo', 'foo']
uj5u.com熱心網友回復:
你可以試試這個:
mylist = ["foo", "bar", "foobar", "foo", "barfoo", "foo"]
none_duplicated = list(dict.fromkeys(mylist))
print([mylist[0], *none_duplicated, mylist[-1]])
實際上,您的問題不是要洗掉重復項,而是要洗掉串列中第一項的出現次數(假設第一個和最后一個相同)。但是如果你想要一個更通用的方法,你將首先嘗試獲取一個沒有重復值的串列,然后添加你的第一個和最后一個。
uj5u.com熱心網友回復:
根據您的示例,有必要洗掉查看整個串列的重復項,然后添加第一個和最后一個元素:
lst = ["foo", "bar", "foobar", "foo", "barfoo", "foo"]
data = [lst[0],
*set([w for w in lst if w not in [lst[0], lst[-1]]]),
lst[-1]]
print(data)
輸出:
['foo', 'bar', 'barfoo', 'foobar', 'foo']
uj5u.com熱心網友回復:
使用切片分配并解包/使用過濾器?
lst = ["foo", "bar", "foobar", "foo", "barfoo", "foo"]
lst[1:-1] = filter(lambda x: x != "foo", lst[1:-1])
print(lst)
輸出:
['foo', 'bar', 'foobar', 'barfoo', 'foo']
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340429.html
上一篇:從索引和值點創建矩陣
