通过for循环在python中列出部分列表

时间:2018-05-29 08:55:15

标签: python

我正在尝试从字符串列表中删除一些单词。

list1= "abc dfc kmc jhh jkl"

我的目标是删除'dfc''jhh'的字词。我是Python的新手,所以我用c#中的索引尝试了一些东西,但它们在这里不起作用。

我正在尝试这个:

index=0
for x in list1:
  if x=='dfc'
    currentindex=index
    for y in list1[currentindex:]
        if y!='jhh'
           break;
        del list1[currentindex]
        currentindex=index
  elif x=='jhh'
       break;

7 个答案:

答案 0 :(得分:1)

而不是一个长的for循环,Python中的一个简单切片可以解决这个问题:

words = ['abc', 'dfc', 'kmc', 'jhh', 'jkl']

del words[1:4]
print(words)

索引从0开始。因此您要删除索引1-3。我们在切片中输入4,因为Python在最后一个索引参数之前停止-1(所以在索引3处)。比循环容易得多。

这是你的输出:

['abc', 'jkl']

答案 1 :(得分:1)

>>> a = "abc dfc kmc jhh jkl"
>>> print(a.split("dfc")[0] + a.split("jhh")[1])
abc  jkl

您可以使用lambda进行此样本处理:

b = lambda a,b,c : a.split(b)[0] + a.split(c)[1]
print(b(a, "dfc", "jhh"))

答案 2 :(得分:0)

首先,将字符串拆分为单词:

list1 = "abc dfc kmc jhh jkl"
words = list1.split(" ")

接下来,迭代这些单词直到找到匹配项:

start_match = "dfc"
start_index = 0
end_match = "jhh"
end_index = 0
for i in range(len(words)):
    if words[i] == start_match:
        start_index = i
    if words[i] == end_match:
        end_index = j
        break
print ' '.join(words[:start_index]+words[end_index+1:])

注意:在多个匹配的情况下,这将删除最少量的单词(选择最后一个start_match和第一个end_match)。

答案 3 :(得分:0)

list1= "abc dfc kmc jhh jkl".split()使list1如下:

['abc', 'dfc', 'kmc', 'jhh', 'jkl']

现在,如果要删除列表元素,可以尝试

list1.remove(item) #removes first occurrence of 'item' in list1

或者

list1.pop(index) #removes item at 'index' in list1

答案 4 :(得分:0)

通过拆分字符串

来创建单词列表
list1= "abc dfc kmc jhh jkl".split()

然后使用标志变量迭代列表,以指示是否应从列表中删除元素

flag = False   
for x in list1:
    if x=='dfc':
        flag = True
    if x == 'jhh':
        list1.remove(x)
        flag = False
    if flag == True:
        list1.remove(x)

答案 5 :(得分:0)

您尝试过的内容存在一些问题,尤其是:

  1. list1是一个字符串,而不是一个列表
  2. 当你写list1[i]时,你会得到索引i的字符(不是一个字)
  3. 在你的for循环中,你试着修改你迭代的字符串:这是一个非常糟糕的主意。
  4. 这是我使用re.sub()的单行样式建议,它只是替换与给定正则表达式模式匹配的字符串的一部分。它可能足以满足您的目的:

    import re
    
    list1= "abc dfc kmc jhh jkl"
    list1 = re.sub(r'dfc .* jhh ', "", list1)
    
    print(list1)
    

    注意:我保留了标识符list1,即使它是一个字符串。

答案 6 :(得分:-1)

你可以这样做

ovs-ofctl