Python 我该如何摆脱“我该怎么做?”;K";从字符串列表中,我希望它是整数

Python 我该如何摆脱“我该怎么做?”;K";从字符串列表中,我希望它是整数,python,string,integer,Python,String,Integer,我不确定我的标题是否足够清楚。我有以下清单: [u'394', u'132.2k', u'6.8k', u'1', u'100', u'457', u'3.5k', u'3.5k', u'184', u'507', u'57'] 我想循环这个列表,删除所有的K,当删除它们时,将元素乘以1000。所以我想我需要把每个字符串转换成一个整数,然后再相乘 我试过各种各样的食谱,但我有点迷路了。以下是我迄今为止所做的工作: for item in stringlist: if 'k' in

我不确定我的标题是否足够清楚。我有以下清单:

[u'394', u'132.2k', u'6.8k', u'1', u'100', u'457', u'3.5k', u'3.5k', u'184', u'507', u'57']
我想循环这个列表,删除所有的K,当删除它们时,将元素乘以1000。所以我想我需要把每个字符串转换成一个整数,然后再相乘

我试过各种各样的食谱,但我有点迷路了。以下是我迄今为止所做的工作:

  for item in stringlist:
    if 'k' in item:
      finallist.append(item)
然而,这根本不起作用,因为它返回给我一个没有任何数字的
k
列表。我还尝试使用
替换
,但无法使其工作

我知道这很容易,但这不是我的主要问题…

试试这个:

start_list = [u'394', u'132.2k', u'6.8k', u'1', u'100', u'457', u'3.5k', u'3.5k', u'184', u'507', u'57']

end_list = [int(1000*float(x.replace('k', ''))) if 'k' in x else int(x) for x in start_list]

print(end_list)
印刷品:

[394, 132200, 6800, 1, 100, 457, 3500, 3500, 184, 507, 57]
编辑:如果元素为空,我们可以使其更健壮一些,因此(为了易读而隔开):

通过将
'0'
添加到包含
(但不包含
k
)的任何元素的任一侧,我们捕获了
u'的空大小写。
。请注意,这将对十进制值进行四舍五入,输出如下:

[394, 132200, 6800, 1, 100, 457, 3500, 3500, 184, 507, 57, 0, 1]

您可以使用正则表达式来确定您是有一个正则数,还是有一个“k”数(“3k”和“3.0k”都将产生3000)

更新:作为奖励,这一款还涉及到“M”代表Mega和“G”代表Giga:-)


我试过我的真实元素列表,我有这个错误,这意味着什么
以10为基数的int()的文本无效:'.
您的列表是否包含元素
u'.
?@SimonBreton已编辑以尝试捕获可能的问题。非常感谢。无论如何,我会继续写这个脚本!
[394, 132200, 6800, 1, 100, 457, 3500, 3500, 184, 507, 57, 0, 1]
import re

ds = [u'394', u'132.2k', u'6.8k', u'7k', u'9.7G', u'18.1M']


factors = {'k': 1e3, 'M': 1e6, 'G': 1e9}
def f(s):
    mo = re.match(r'(\d+(?:\.\d+)?)([kMG])?', s)
    return int(float(mo.group(1)) * factors.get(mo.group(2), 1))

print([f(d) for d in ds])