相关疑难解决方法(0)

循环"忘记"删除一些项目

在这段代码中,我试图创建一个函数anti_vowel,它将从字符串中删除所有元音(aeiouAEIOU).我认为它应该可以正常工作,但是当我运行它时,示例文本"嘿看单词!" 以"Hy lk Words!"返回.它"忘记"删除最后一个'o'.怎么会这样?

text = "Hey look Words!"

def anti_vowel(text):

    textlist = list(text)

    for char in textlist:
        if char.lower() in 'aeiou':
            textlist.remove(char)

    return "".join(textlist)

print anti_vowel(text)
Run Code Online (Sandbox Code Playgroud)

python string list

77
推荐指数
6
解决办法
7039
查看次数

快速从列表/队列中删除一些项目

这是一个类似问题的后续问题,它提出了最好的写作方式

for item in somelist:
    if determine(item):
         code_to_remove_item
Run Code Online (Sandbox Code Playgroud)

似乎共识就是这样的

somelist[:] = [x for x in somelist if not determine(x)]
Run Code Online (Sandbox Code Playgroud)

但是,我认为如果你只删除一些项目,大多数项目都被复制到同一个对象中,也许这很慢.在回答另一个相关问题时,有人建议:

for item in reversed(somelist):
    if determine(item):
        somelist.remove(item)
Run Code Online (Sandbox Code Playgroud)

但是,这里list.remove将搜索项目,即列表长度为O(N).可能我们受到限制,因为列表表示为数组而不是链表,因此删除项目后需要移动所有内容.但是,这里建议collections.dequeue表示为双向链表.然后可以在迭代时在O(1)中移除.我们如何实现这一目标?

更新:我也做了一些时间测试,使用以下代码:

import timeit
setup = """
import random
random.seed(1)
b = [(random.random(),random.random()) for i in xrange(1000)]
c = []
def tokeep(x):
        return (x[1]>.45) and (x[1]<.5)
"""
listcomp = """
c[:] = [x for x in b if tokeep(x)]
""" …
Run Code Online (Sandbox Code Playgroud)

python queue optimization list time-complexity

13
推荐指数
1
解决办法
2万
查看次数

Python - 在这种情况下列表理解是有效的吗?

这是python中输入的"脏"列表

input_list = ['  \n  ','  data1\n ','   data2\n','  \n','data3\n'.....]
Run Code Online (Sandbox Code Playgroud)

每个列表元素包含带有新行字符的空格或带有换行字符的数据

使用以下代码清理它..

cleaned_up_list = [data.strip() for data in input_list if data.strip()]
Run Code Online (Sandbox Code Playgroud)

  cleaned_up_list =   ['data1','data2','data3','data4'..]
Run Code Online (Sandbox Code Playgroud)

strip()在上面的列表理解期间,python是否内部调用了两次?或者我是否必须使用for循环迭代,strip()如果我关心效率,我只需要一次?

for data in input_list
  clean_data = data.strip()
     if(clean_data):
         cleaned_up_list.append(clean_data)
Run Code Online (Sandbox Code Playgroud)

python

12
推荐指数
1
解决办法
352
查看次数

标签 统计

python ×3

list ×2

optimization ×1

queue ×1

string ×1

time-complexity ×1