【问题标题】:Trying to remove any string from a list of strings, if a letter is in a certain position如果字母位于某个位置,则尝试从字符串列表中删除任何字符串
【发布时间】:2022-01-14 02:16:22
【问题描述】:

我正在尝试搜索字符串列表,如果它在某个字符位置有一个字母,我想从列表中删除该字符串。到目前为止,我有:

l = ['fast', 'attack', 'slow', 'baft', 'attack', 'baft']

for strings in l:
if 'a' in strings[0]:
    l.pop()

print(l)

谢谢。

【问题讨论】:

  • 当询问与代码相关的问题时,您应该添加的第一个标签是您正在编码的语言的标签。请edit您的帖子添加该标签;您可以删除无意义的“循环”、“字符”和“字符串”为其腾出空间。
  • l.pop() -> l.remove(strings) 警告:How to remove items from a list while iterating?
  • [x for x in l if x[0]!='a']
  • 如果您反复弹出或删除,您正在运行 O(n^2),因为删除后的每个列表元素都必须向左移动一个。创建一个全新的列表并附加值是 O(n),因为附加到列表的末尾是 O(1)。

标签: python string list char list-comprehension


【解决方案1】:

好吧,首先我要说 pop 不是该过程的最佳选择。 pop 将返回该值,您只是想删除它。要从给定索引的列表中删除元素,您可以这样做:

my_list = [1,2,3,4]
del(my_list[2])

尽管如此,通过 for 循环同时删除属于其中的元素并不是一个好主意。最好创建一个仅包含所需元素的新列表。

my_list = ['fast', 'attack', 'slow', 'baft', 'attack', 'baft']
my_new_list = []
for value_str in my_list:
    if 'a' != value_str[0]:
        my_new_list.append(value_str)

这也可以使用列表推导更简洁地完成。下面的 sn-p 和上面的一样,但是代码更少。

my_list = ['fast', 'attack', 'slow', 'baft', 'attack', 'baft']
my_new_list = [value_str for value_str in my_list if value_str[0] != 'a']

Tim 已经给了你这个 sn-p 作为答案,但我觉得考虑到这个问题,最好给你一个更具描述性的答案。

如果您有兴趣,这是了解更多关于列表推导的好链接(它们非常简洁): Real Python - List Comprehensions

【讨论】:

    【解决方案2】:

    我们可以尝试使用列表推导:

    l = ['fast', 'attack', 'slow', 'baft', 'attack', 'baft']
    output = [x for x in l if x[0] != 'a']
    print(output)  # ['fast', 'slow', 'baft', 'baft']
    

    【讨论】:

      猜你喜欢
      • 2012-05-02
      • 2012-01-27
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      相关资源
      最近更新 更多