Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
为什么';这个Python代码是否从列表中删除了一个数字?_Python - Fatal编程技术网

为什么';这个Python代码是否从列表中删除了一个数字?

为什么';这个Python代码是否从列表中删除了一个数字?,python,Python,isdigit()在这里不起作用: li=["word",'2.134123'] for i in li: if i.isdigit(): li.remove(i) 如果数字有小数,Isdigit不起作用。在这种情况下返回False。如果数字有小数,则数字无效。在这种情况下返回False。请参阅 str.isdigit() 如果字符串中的所有字符都是数字和,则返回True 至少有一个字符,False否则 字符串还包含小数点,这就是函数返回False的原因,请参见 str.isdigit(

isdigit()
在这里不起作用:

li=["word",'2.134123']
for i in li:
 if i.isdigit():
  li.remove(i)

如果数字有小数,Isdigit不起作用。在这种情况下返回False。

如果数字有小数,则数字无效。在这种情况下返回False。

请参阅

str.isdigit()

如果字符串中的所有字符都是数字和,则返回
True
至少有一个字符,
False
否则

字符串还包含小数点,这就是函数返回
False

的原因,请参见

str.isdigit()

如果字符串中的所有字符都是数字和,则返回
True
至少有一个字符,
False
否则


您的字符串还包含小数点,这就是为什么函数返回
False

isdigit
未通过对表示为字符串的浮点的检查

isdigit
的帮助指定:

Return True if all characters in S are digits
    and there is at least one character in S, False otherwise.
因此,有了这些,你的工作将是找到其他方法来确定某些东西是否确实通过了“数字”检查

您可以做的是将尝试在try/except中将每个项转换为浮点,然后将属于except的每个项附加到新列表中:

def remove_numbers(li):
    numberless = []
    for i in li:
        try:
            float(i)
        except:
            numberless.append(i)
    return numberless

res = remove_numbers(["word",'2.134123'])
print(res)
# outputs ['word']
另一种方法是修改函数,根据
float
测试简单地返回
True
False
,并利用
remove\u numbers
方法的结果“过滤”列表。(谢谢@Pynchia)

就性能而言,两者之间没有真正的优势,这可能是因为
过滤器
实现中的增益是由调用
not_a_float

python3 -mtimeit -s'from remove_floats import remove_numbers_loop; from random import randint' -s'l=[str(i) if randint(0,100)< 20 else "abc"+str(i) for i in range(1000000)]' -s 'remove_numbers_loop(l)'
python3 -mtimeit -s'from remove_floats import remove_numbers_filter; from random import randint' -s'l=[str(i) if randint(0,100)< 20 else "abc"+str(i) for i in range(1000000)]' -s 'remove_numbers_filter(l)'

100000000 loops, best of 3: 0.00929 usec per loop
100000000 loops, best of 3: 0.0107 usec per loop
python3-mtimeit-s'from remove\u float导入remove\u number\u循环;从随机导入randint'-s'l=[str(i)if randint(0100)<20 else“abc”+str(i)for i in range(1000000)]'-s'删除\u编号\u循环(l)'
python3-mtimeit-s'from remove_float导入remove_number_过滤器;从随机导入randint'-s'l=[str(i)if randint(0100)<20 else“abc”+str(i)for i in range(1000000)]'-s'删除\u数字\u过滤器(l)'
100000000个循环,最好为3个:每个循环0.00929 usec
100000000个循环,每个循环3:0.0107 usec的最佳值

isdigit
未通过对表示为字符串的浮点的检查

isdigit
的帮助指定:

Return True if all characters in S are digits
    and there is at least one character in S, False otherwise.
因此,有了这些,你的工作将是找到其他方法来确定某些东西是否确实通过了“数字”检查

您可以做的是将尝试在try/except中将每个项转换为浮点,然后将属于except的每个项附加到新列表中:

def remove_numbers(li):
    numberless = []
    for i in li:
        try:
            float(i)
        except:
            numberless.append(i)
    return numberless

res = remove_numbers(["word",'2.134123'])
print(res)
# outputs ['word']
另一种方法是修改函数,根据
float
测试简单地返回
True
False
,并利用
remove\u numbers
方法的结果“过滤”列表。(谢谢@Pynchia)

就性能而言,两者之间没有真正的优势,这可能是因为
过滤器
实现中的增益是由调用
not_a_float

python3 -mtimeit -s'from remove_floats import remove_numbers_loop; from random import randint' -s'l=[str(i) if randint(0,100)< 20 else "abc"+str(i) for i in range(1000000)]' -s 'remove_numbers_loop(l)'
python3 -mtimeit -s'from remove_floats import remove_numbers_filter; from random import randint' -s'l=[str(i) if randint(0,100)< 20 else "abc"+str(i) for i in range(1000000)]' -s 'remove_numbers_filter(l)'

100000000 loops, best of 3: 0.00929 usec per loop
100000000 loops, best of 3: 0.0107 usec per loop
python3-mtimeit-s'from remove\u float导入remove\u number\u循环;从随机导入randint'-s'l=[str(i)if randint(0100)<20 else“abc”+str(i)for i in range(1000000)]'-s'删除\u编号\u循环(l)'
python3-mtimeit-s'from remove_float导入remove_number_过滤器;从随机导入randint'-s'l=[str(i)if randint(0100)<20 else“abc”+str(i)for i in range(1000000)]'-s'删除\u数字\u过滤器(l)'
100000000个循环,最好为3个:每个循环0.00929 usec
100000000个循环,每个循环3:0.0107 usec的最佳值

您在迭代列表时正在修改列表,这将导致出现问题。另外,“.”不是数字字符。
.isdigit()
用于
int
,而不是
float
。看看有没有解决办法。此外,在遍历易变对象(如列表)时,不应修改它,否则将得到意外的结果。isdigits不适用于float。请看这里,您在迭代列表时正在修改列表,这将导致问题。另外,“.”不是数字字符。
.isdigit()
用于
int
,而不是
float
。看看有没有解决办法。此外,在遍历易变对象(如列表)时,不应修改它,否则将得到意外的结果。isdigits不适用于float。看这里。代码可以放在函数中,比如说
不是浮点数。它将只返回True/False,没有附加。然后简单地使用
过滤器(is\u not\u float,li)
(转换为列表,如果在py3上)嗯。。。考虑到您正在创建一个新的列表,我认为我的观点是
filter
比添加for循环要快。如果你愿意的话,请再读一遍我的评论。函数应仅检查值是否为浮点值。只是我的想法,没有令人信服的理由改变code@Pynchia你太棒了。干杯。我冒昧地编辑了你的代码,删除了一个不必要的
for
循环,这很有趣。再看看这个:投票率高。代码可以放在函数中,比如说
不是浮点数。它将只返回True/False,没有附加。然后简单地使用
过滤器(is\u not\u float,li)
(转换为列表,如果在py3上)嗯。。。考虑到您正在创建一个新的列表,我认为我的观点是
filter
比添加for循环要快。如果你愿意的话,请再读一遍我的评论。函数应仅检查值是否为浮点值。只是我的想法,没有令人信服的理由改变code@Pynchia你太棒了。干杯。我冒昧地编辑了你的代码,删除了一个不必要的
for
循环,这很有趣。再看看这个: