无法在正确的索引处将值插入列表

时间:2017-09-11 09:50:04

标签: python list sorting insertion

我收到了一个数字列表,我想对它们进行排序。 输入看起来像这样:

private void ProcessCSV(string filename)
    {
        Regex r = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
        StreamReader sr = new StreamReader(filename);
        string line = null;
        string[] strArray;
        int iteration = 0;
        while ((line = sr.ReadLine()) != null)
        {

                if (iteration == 0)
                {
                    iteration++;
                    continue;                   //Because Its Heading
                }

                strArray = r.Split(line);
                StoreLocation store = new StoreLocation();
                store.Name = strArray[0];
                store.StoreName = strArray[1];
                store.Street = strArray[2];
                store.Street2 = strArray[3];
                store.St_City = strArray[4];
                store.St_St = strArray[5];
                store.St_Zip = strArray[6];
                store.St_Phone = strArray[7];
                store.Office_Phone = strArray[8];
                store.Fax = strArray[9];
                store.Ownership = strArray[10];
                store.website = strArray[11];
                store.Retailer = check(strArray[12]);
                store.WarehouseDistributor = check(strArray[13]);
                store.OnlineRetailer = check(strArray[14]);
                string temp_Add = store.Street + "," + store.St_City;
                try
                {
                    var  point = new GoogleLocationService().GetLatLongFromAddress(temp_Add);
                    string points = string.Format("POINT({0} {1})", point.Latitude, point.Longitude);
                    store.Location = DbGeography.FromText(points);//lat_long
                }
                catch (Exception e)
                {
                    continue;
                }
                db.StoreLocations.Add(store);
                db.SaveChanges();  
        }

以txt文件的形式出现。

代码如下所示:

i:1,3,5,8
n:2
t:4,7
a:6
v:9

给出了这个输出:

flat_list = [item for sublist in decks for item in sublist]
p = [] 

for x in range(len(flat_list)):
    nr = flat_list[x][0]
    o = nr -1
    p.insert((o),(flat_list[x][1]))

print(p)

这几乎是我想要的,除了7和8。 那我该怎么办?

2 个答案:

答案 0 :(得分:1)

您声明一个空列表:

p = [] 

但你打电话给list.insert。不幸的是,这会导致一些意想不到的副作用。观察:

In [209]: p.insert(999, 0)

In [210]: p
Out[210]: [0]

在0 th 位置插入,尽管你想要它在(999 + 1) th 的地方。这种事情是你在错误的地方看到物品的原因,它们从未正确插入过。

修复方法是将[None]列表相乘。此外,如果迭代元素而不是索引,则应该能够大大简化插入逻辑。

p = [None] * len(flat_list) 

for i, y in flat_list: 
    p[i - 1] = y

答案 1 :(得分:0)

你应该真的在处理你的问题。

但我相信这可能是您正在寻找的答案。

from operator import itemgetter
flat_list = [(1,a),(6,b),(3,d),(7,c),(9,a),(4,b)]
sorted(flat_list, key=itemgetter(0))

我通过谷歌搜索发现了这一点,也许你应该尝试相同的。