当前位置: 首页 > 知识库问答 >
问题:

如何遍历列表中的每个字符串并对其进行修改?

伯逸明
2023-03-14

我试图遍历每个数字索引,并过滤所述索引中excepted_words的任何实例。这个程序的输出似乎几乎没有修改,如果有的话。我该怎么解决这个问题?

nums = ['-634-2385 BI', '-638-9255 Br', '.789-2936 Br', '785-2141 Br', '785-7424 Br', '634-8122 Bri', '783-2642 Br', '783-2012 !', '634-2060 Br']
excepted_chars = ['ABCDEFGHIJKLMNOPQRSTUVWXYZabdefghijklmnopqrstuvwxyz-_!?']

for i in nums.copy():
    for e in i:
        if any(char in excepted_chars for char in e):
            nums[nums.index(i)] = nums[nums.index(i)].replace(e, '')

输出:

['-634-2385 BI', '-638-9255 Br', '.789-2936 Br', '785-2141 Br', '785-7424 Br', '634-8122 Bri', '783-2642 Br', '783-2012 !', '634-2060 Br',]

共有3个答案

沈宏朗
2023-03-14

问题是excepted_chars是一个列表,所以excepted_chars中的期望它完全是'ABCDEFGHIJKLMNOPQRSTUVWXYZabdeghijklmnopqrstuvwxyz-_!?'. make it a string:

excepted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabdefghijklmnopqrstuvwxyz-_!?'

另外,如果要删除非数值,请使用带有列表理解功能的.isdigitmap功能:

nums = list(map(lambda x: ''.join(c for c in x if c.isdigit()), nums))

nums = [''.join(c for c in i if c.isdigit()) for i in nums]

孙岳
2023-03-14

您可以通过将异常字符字符串转换为集合来提高性能(尽管这不是问题的一部分)。然后,你可以这样实现你的目标:

nums = ['-634-2385 BI', '-638-9255 Br', '.789-2936 Br', '785-2141 Br',
        '785-7424 Br', '634-8122 Bri', '783-2642 Br', '783-2012 !', '634-2060 Br']
excepted_chars = set('ABCDEFGHIJKLMNOPQRSTUVWXYZabdefghijklmnopqrstuvwxyz-_!?')
newnums = []
for n in nums:
    w = [c for c in n if c not in excepted_chars]
    newnums.append(''.join(w))
print(newnums)

当然,newnums可以用更复杂的列表理解来构建,但我已经将其分解,希望能让它更容易理解

林彬
2023-03-14

使用列表更容易重建nums。另请注意excepted_chars中的额外间接级别,因为它是单个字符串的列表:

>>> nums = ['-634-2385 BI', '-638-9255 Br', '.789-2936 Br', '785-2141 Br', '785-7424 Br', '634-8122 Bri', '783-2642 Br', '783-2012 !', '634-2060 Br']
>>> excepted_chars = ['ABCDEFGHIJKLMNOPQRSTUVWXYZabdefghijklmnopqrstuvwxyz-_!?']
>>> nums = [''.join(char for char in i if char not in excepted_chars[0]) for i in nums]
>>> nums
['6342385 ', '6389255 ', '.7892936 ', '7852141 ', '7857424 ', '6348122 ', '7832642 ', '7832012 ', '6342060 ']
 类似资料:
  • 问题内容: 我有一个允许用户上载文本文件或将文件内容复制/粘贴到文本区域的表格。我可以轻松地区分两者,然后将它们输入的任何一个放入字符串变量中,但是我从那里去哪里呢? 我需要遍历字符串的每一行(最好不要担心不同机器上的换行符),确保它只有一个令牌(没有空格,制表符,逗号等),清理数据,然后生成一个SQL查询基于所有方面。 我是一个非常优秀的程序员,所以我知道如何做的一般想法,但是自从使用PHP以来

  • 我有一个数据帧,其中一列(x1)包含字符串值。我使用这些字符串值修改数据帧中其他列的相应逻辑值(其他列以列x1的字符串中可能的子字符串值命名,即“Dog”、“Cat”、“Bird”)。 我已经弄清楚了如何使用str裂()来解析x1列中的每个字符串。我还知道如何根据这些str裂()结果改变/修改其他三列。 我目前坚持的是如何将下面的for循环应用于我的数据帧中的每一行。 因此,对于上面的示例,我希望

  • 问题内容: 在Python中有两个可迭代的对象,我想成对地讨论它们: 导致: 一种方法是遍历索引: 问题答案: Python 3 当或的较短者停止时,停止。 在Python 3 中,像在Python2中一样,返回元组的迭代器。要获取元组列表,请使用。要压缩直到两个迭代器都用尽,可以使用 。 Python 2 在Python 2中, 返回一个元组列表。当且不是很大时,这很好。如果它们都是大量的,则形

  • 我对c语言不太精通,我对 逐个字符遍历char* 正确比较单个字符和另一个字符 给定一个类似“abcda”的字符串,我想计算“a”的数量并返回计数 我也不应该使用strlen() 如何正确地一次比较一个字符?

  • 问题内容: 如何遍历Java中的字符串? 我正在尝试使用foreach样式进行循环 问题答案: 如果要使用增强循环,可以将字符串转换为charArray

  • 问题内容: 我有这样定义的多行字符串: 我们用作我正在编写的解析器的测试输入的字符串。解析器功能接收-object作为输入并对其进行迭代。它还确实直接调用该方法以跳过行,因此我确实需要一个迭代器作为输入,而不是可迭代的。我需要一个迭代器,它可以在字符串的各个行之间进行迭代,就像-object可以在文本文件的行之间进行迭代一样。我当然可以这样: 是否有更直接的方法?在这种情况下,字符串必须遍历一次以