python:在for循环中将字符串读入int进行比较。

2024-10-04 07:24:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的,如果这是个愚蠢的问题,我很抱歉。我得到的数据是按GDP列出的国家(来自factbook)。在这里,它被编译成一个字符串:

'\n1\tEuropean Union\t$ 15,970,000,000,000\n2\tUnited States\t$
15,940,000,000,000\n3\tChina\t$ 12,610,000,000,000\n4\tIndia\t$
4,761,000,000,000\n5\tJapan\t$ 4,704,000,000,000\n6\tGermany\t$
3,250,000,000,000\n7\tRussia\t$ 2,555,000,000,000\n8\tBrazil\t$
2,394,000,000,000\n9\tUnited Kingdom\t$
2,375,000,000,000\n10\tFrance\t$ 2,291,000,000,000\n11\tItaly\t$
1,863,000,000,000\n12\tMexico\t$ 1,788,000,000,000\n13\tKorea, South\t$ 1,640,000,000,000\n14\tCanada\t$
1,513,000,000,000\n15\tSpain\t$ 1,434,000,000,000\n16\tIndonesia\t$ 1,237,000,000,000\n17\tTurkey\t$ 1,142,000,000,000\n18\tIran\t$
1,016,000,000,000\n19\tAustralia\t$ 986,700,000,000\n20\tSaudi Arabia\t$ 921,700,000,000\n21\tTaiwan\t$
918,300,000,000\n22\tPoland\t$ 814,100,000,000\n23\tArgentina\t$
755,300,000,000\n24\tNetherlands\t$
718,600,000,000\n25\tThailand\t$ 662,600,000,000\n26\tSouth Africa\t$ 592,000,000,000\n27\tEgypt\t$
548,800,000,000\n28\tPakistan\t$ 523,900,000,000\n29\tColombia\t$ 511,100,000,000\n30\tMalaysia\t$ 506,700,000,000\n31\tNigeria\t$
455,500,000,000\n32\tPhilippines\t$
431,300,000,000\n33\tBelgium\t$ 427,200,000,000\n34\tVenezuela\t$ 408,500,000,000\n35\tSweden\t$ 399,400,000,000\n36\tHong Kong\t$
375,500,000,000\n37\tSwitzerland\t$
369,400,000,000\n38\tAustria\t$ 364,900,000,000\n39\tUkraine\t$
340,700,000,000\n'

我的脚本经历了这个过程,我想比较一下循环中的x+1,如果在n之后有这个数字,那么每次它碰到一个n之后的整数。我要求它检查它是否与计数器相同,如果是,我打印"here's a line"。这是我的剧本:

DataCounter = 1
for x in data:
    if x == "n":
        if x+1 == DataCounter:
            print("new line")
            print(DataCounter)
            DataCounter = DataCounter + 1

我知道这不是完美的,我知道我的例子只上升到9,但它会为我做的工作(可能有歧义)。我遇到了问题,因为它将DataCounter(int)与字符串x+1进行比较。我该怎么办?错误如下:

Traceback (most recent call last):
  File "<pyshell#85>", line 3, in <module>
    if x+1 == DataCounter:
TypeError: Can't convert 'int' object to str implicitly

Tags: 数据字符串inifline国家intprint
2条回答

\t\n是单个字符,分别表示制表符和换行符。你不能把他们当作两个角色。你知道吗

你可以把整个事情变成一个列表(指数,国家,国内生产总值)3元组在一次去如下:

data2 = [(int(a), b, int(c.strip('$').replace(',', ''))) 
         for a, b, c in [s.split("\t") 
         for s in data.strip("\n").split("\n")]]

这样,在列表中循环并测试所需的值就容易多了。你知道吗

import re
import decimal

def money(s, reg=re.compile('[^0-9\.+-]+')):
    return decimal.Decimal(reg.sub('', s))

data = data.strip().split('\n')                             # break the text into a string per country
data = [row.split('\t') for row in data]                    # break each country into three strings
data = [[int(n), name, money(val)] for n,name,val in data]    # convert data types appropriately

数据现在看起来像

[
    [1, 'European Union', Decimal('15970000000000')],
    [2, 'United States', Decimal('15940000000000')],
    [3, 'China', Decimal('12610000000000')],
    [4, 'India', Decimal('4761000000000')],
    [5, 'Japan', Decimal('4704000000000')],
    # ...
    [38, 'Austria', Decimal('364900000000')],
    [39, 'Ukraine', Decimal('340700000000')]
]

相关问题 更多 >