我收到了一个数字列表,我想对它们进行排序。 输入看起来像这样:
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。 那我该怎么办?
答案 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))
我通过谷歌搜索发现了这一点,也许你应该尝试相同的。