数组在python中没有正确排序

时间:2015-03-12 01:20:53

标签: python arrays sorting

当我尝试在python中使用sorted()函数时,它只按字母顺序对每个数组中的元素进行排序,因为前3个输出是:

[u'A', u'a', u'a', u'f', u'g', u'h', u'i', u'n', u'n', u's', u't']
[u'N', u'a', u'e', u'g', u'i', u'i', u'r']
[u'C', u'a', u'e', u'm', u'n', u'o', u'o', u'r']

这些应该分别是阿富汗,尼日利亚和喀麦隆,但它们只是在他们自己的阵列中排序。

我的代码在哪里出错?

import urllib2
import csv
from bs4 import BeautifulSoup

url = "http://en.wikipedia.org/wiki/List_of_ongoing_armed_conflicts"
soup = BeautifulSoup(urllib2.urlopen(url))

#f= csv.writer(open("test.csv","w"))
#f.writerow(["location"])
def unique(countries):
    seen = set()
    for country in countries:
        l = country.lower()
        if l in seen:
            continue
        seen.add(l)
        yield country



for row in soup.select('table.wikitable tr'):
    cells = row.find_all('td')
    if cells:
        for location in cells[3].find_all(text=True):
            location = location.split()

            for locations in unique(location):
                print sorted(locations)

#f.writerow([location])

2 个答案:

答案 0 :(得分:1)

您的变量名称很糟糕,让您感到困惑。 location是一个位置列表,locations是一个位置!

你想要:

for locations in cells[3].find_all(text=True):
    locations = locations.split()

    for location in sorted(unique(locations)):
        print location 

答案 1 :(得分:1)

对于循环的每次迭代,您可以获得一个或多个位置(作为列表)。所有这些都需要添加到单个列表中才能对其进行排序。

我们使用extend方法来做到这一点。

locs = []  # contains all locations
for row in soup.select('table.wikitable tr'):
    cells = row.find_all('td')
    if cells:
        # location here returns a list
        for location in cells[3].find_all(text=True):
            locs.extend(location.split())

print sorted(locs)

sorted(locs)也是一个列表。要打印特定元素,您可以

specific_element = sorted(locs)[index]