Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不幸的是,python3对偶数进行了转义_Python_Python 3.x - Fatal编程技术网

不幸的是,python3对偶数进行了转义

不幸的是,python3对偶数进行了转义,python,python-3.x,Python,Python 3.x,我有一个功能: def fun(l): for i in l: if len(i)==10: l.append('+91 {} {}'.format(i[:5],i[5:])) l.remove(i) if len(i)==11: j=list(''.join(i)) j.remove(i[0]) l.append('+91 {} {}'.format(''.join(j[:5]),''.join(j[5:]

我有一个功能:

def fun(l):
    for i in l:
     if len(i)==10:
      l.append('+91 {} {}'.format(i[:5],i[5:]))
      l.remove(i)
     if len(i)==11:
      j=list(''.join(i))
      j.remove(i[0])
      l.append('+91 {} {}'.format(''.join(j[:5]),''.join(j[5:])))
      l.remove(i)
     if len(i)==12:
      j=list(''.join(i))
      j.remove(i[0])
      j.remove(i[1])
      l.append('+91 {} {}'.format(''.join(j[:5]),''.join(j[5:])))
      l.remove(i)
     if len(i)==13:
      j=list(''.join(i))
      j.remove(i[0])
      j.remove(i[1])
      j.remove(i[2])
      l.append('+91 {} {}'.format(''.join(j[:5]),''.join(j[5:])))
      l.remove(i)
  return l
假设l=['9195969878'、'07895462130'、'919875641230']

我得到的输出是

['+91919596988'、'7895462130'、'+919875641230']

但是我假设得到的输出是: [91919596988'、+917895462130'、+919875641230']


实际上,这个函数正在转义所有被定位的内容,即使“l”列表中没有。请建议

您正在修改列表l,我建议您创建一个新列表,并在此列表中添加内容。你想就地变异有什么原因吗

如果你想就地突变,为什么不这样做呢

l[index] = '+91 {} {}'.format(i[:5],i[5:])

此外,这里是“python电话号码库”的第一个google结果:因为它可能对您有用。(从未使用过,我不是维护者。)

第一个问题是,在迭代列表时,您正在对列表进行变异。在这种特殊情况下,这会导致循环跳过一些项目,因为您删除了以前的项目。在其他Python版本中,它可能会触发错误。但是你正在返回你的结果,所以我不明白你为什么要改变列表

其次,你的代码做了一些迂回的事情,特别是
'.join(i)
,这绝对是多余的(它从字面上重建了相同的字符串),以及一系列的remove()调用,这些调用几乎肯定做不到你所期望的。如果从[1,2,3]中删除第一项,则列表将变为[2,3],如果随后删除第二项(索引1),则会得到[2]。这与for循环在另一个remove中遇到的问题相同

我还将稍微重新构造代码,以避免代码重复。我得到的结果是:

def fun(l):
    return ['+91 {} {}'.format(i[-10:-5],i[-5:])
            for i in l]
这不会改变
l
,只进行一次传递,并通过观察到我们使用的零件与末端的固定距离来连接所有不同的长度行为。有一个警告:其他长度不能单独处理。我不知道这些是否发生,也不知道您实际希望如何处理它们(旧代码会让它们保持原样)。我们可以很容易地指定其他行为:

def fun(l):
    return ['+91 {} {}'.format(i[-10:-5],i[-5:]) if 10<=len(i)<=13
            else i
            for i in l]
def fun(l):

return['+91{}{}。format(i[-10:-5],i[-5:])如果10Great,我会尝试在这里告诉你一个小错误。你的
i
引用了一个索引,然后是一个列表元素。是的,你不能用l[i]='+91{}。format(i[:5],i[5:])替换,但你可以将它添加到一个新列表中。现在它工作正常了。Tnxs