![](/img/trans.png)
[英]What is the “pythonic” way to create a list with one element or just keep it empty?
[英]A pythonic way to delete successive duplicates of only one element in a list
我知道发布了许多其他类似的问题,但我的不同之处在于他们的答案无法解决。
我有几个可能有多个连续空格的字符列表,我只需要保留一个。 应保留任何其他字符的重复。 我是通过以下方式做到的:
myList = ['o', 'e', 'i', ' ', ' ', ' ', 'l', 'k', ' ', ' ', ' ', ' ', ' ', 'j', 'u']
myList_copy = [myList[0]]
for i in range(1, len(myList):
if not(myList[i] == ' ' and myList[i-1] == ' '):
myList_copy.append(myList[i])
这成功地给了我
['o', 'e', 'i', ' ', 'l', 'k', ' ', 'j', 'u', ' ']
我真的不认为这是一个非常好的、快速的方法。
我看过类似这样的帖子(和其他帖子)有类似的问题。 但是,请注意我实际上只需要删除重复的空格。 也许我需要帮助的是使用 groupby 来做到这一点,但这就是新帖子的原因。
提前致谢。
是的,使用groupby
是个好主意:
import itertools
myList = ['o', 'e', 'i', ' ', ' ', ' ', 'l', 'k', ' ', ' ', ' ', ' ', ' ', 'j', 'u']
result = [key for key,group in itertools.groupby(myList)])
# ['o', 'e', 'i', ' ', 'l', 'k', ' ', 'j', 'u']
如果你想让另一个元素也重复,你可以使用这个:
myList = ['o', 'e', 'i', 'i' , ' ', ' ', ' ', 'l', 'k', ' ', ' ', ' ', ' ', ' ', 'j', 'u']
result = []
for key,group in itertools.groupby(myList):
if key != ' ': # ' 'string
for j in group:
result.append(j)
else: result.append(key)
print(result)
另一个简单? 方法:
myList
中的每个项目以创建一个字符串myList = ['o', 'e', 'i', ' ', ' ', ' ', 'l', 'k', ' ', ' ', ' ', ' ', ' ', 'j', 'u']
new = list(' '.join(''.join(myList).split()))
print(new)
['o', 'e', 'i', ' ', 'l', 'k', ' ', 'j', 'u']
这和你的一样,但在一行
myList_copy = [myList[x] for x in range(len(myList)) if not(myList[x] == ' ' and myList[x-1] == ' ')]
使用 numpy 怎么样? 试试这个代码。
import numpy as np
myList = ['o', 'e', 'i', ' ', ' ', ' ', 'l', 'k', ' ', ' ', ' ', ' ', ' ', 'j', 'u']
myList = np.array(myList)
myList = [myList[0]] + list(myList[1:][~((myList[1:] == myList[:-1]) & (myList[1:] == ' '))])
print(myList)
您可以在列表推导中使用 zip 将每个字符与前一个字符进行比较,并排除前面有另一个空格的空格:
myList = [ c for p,c in zip([""]+myList,myList) if (p,c) != (' ',' ') ]
可以在字符串上使用相同的方法
myList = [ c for p,c in zip("."+myString, myString) if (p,c) != (' ',' ') ]
但是如果您有一个字符串并且想要一个字符串为 output,则 split() 可能会更简洁:
myString = " ".join(myString.split())
使用 pandas 系列并改变结果怎么样?
import pandas as pd
serie = pd.Series(['o', 'e', 'i', ' ', ' ', ' ', 'l', 'k', ' ', ' ', ' ', ' ', ' ', 'j', 'u'])
index = ~(serie == serie.shift(1))
serie = serie[index]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.