2

単一の大きなリスト内に可変長のリスト(5、4、6 ペアなど)のペアが多数あります。それを と呼びましょう例として、大きな LIST 内の多くのリストの 2 つを次に示します。LIST

[(38.621833, -10.825707),
 (38.572191, -10.84311),      -----> LIST[0]
 (38.580202, -10.860877),
 (38.610917, -10.85217),
 (38.631526, -10.839338)]

[(38.28152, -10.744559),
 (38.246368, -10.744552),     -----> LIST[1]
 (38.246358, -10.779088),
 (38.281515, -10.779096)]

first "column" 私は2つの別々の変数を作成する必要があります.1つの変数は、リスト(つまり、38.621833、38.572191など)と2番目の変数には、リストのすべてのペアのsecond "column" (つまり、LIST [0] [0] [1]、LIST [0] [1] [1]など)があります。

最後に、LIST 内のすべてのリストの最初と 2 番目の「列」のすべての値を含む 2 つの変数 (x、y など) を作成します。

私が直面している問題は、これらすべてのリストが同じ長さではないということです!!

私は試した

x = []
y = []
for i in range(len(LIST)):
    x.append(LIST[i][0][0]) #append all the values of the first numbers 
    y.append(LIST[i][1][1]) #append all the values of the second numbers

私が期待するもの:

x = (38.621833,38.572191,38.580202,38.610917,38.631526,38.28152,38.246368,38.246358,38.281515)

y = (-10.825707,-10.84311,-10.860877,-10.85217,-10.839338,-10.744559,-10.744552,-10.779088,-10.779096)

しかし、ここでは変数のペアが原因で、私のループは途中で突然停止します。私はI need to also change the LIST[i][j][0]ここで知っておりj、各リストで変わります。しかし、ペアが違うので、どうすればいいのかわかりません。

どうすればこれを行うことができますか?

4

5 に答える 5

2

サブリストを転置し、itertool.chainを使用して単一のリストを作成する必要があります。

from itertools import chain
zipped = [zip(*x) for x in l]
x, y = chain.from_iterable(ele[0] for ele in  zipped),chain.from_iterable(ele[1] for ele in  zipped)
print(list(x),list(y))


[38.621833, 38.572191, 38.580202, 38.610917, 38.631526, 38.28152, 38.246368, 38.246358, 38.281515] [-10.825707, -10.84311, -10.860877, -10.85217, -10.839338, -10.744559, -10.744552, -10.779088, -10.779096]


for ele1,ele2 in zip(x,y):
    print(ele1,ele2)

38.621833 -10.825707
38.572191 -10.84311
38.580202 -10.860877
38.610917 -10.85217
38.631526 -10.839338
38.28152 -10.744559
38.246368 -10.744552
38.246358 -10.779088
38.281515 -10.779096
于 2014-11-20T11:04:13.107 に答える
0

どうぞ。tuple要求どおり。

my = [(38.621833, -10.825707),(38.572191, -10.84311),(38.580202, -10.860877),(38.610917, -10.85217),(38.631526, -10.839338)]

my1 = [(38.28152, -10.744559),(38.246368, -10.744552),(38.246358, -10.779088),(38.281515, -10.779096)]



l1 = map(tuple,zip(*my))[0]
l2 = map(tuple,zip(*my))[1]
print l1,l2

出力:

(38.621833, 38.572191, 38.580202, 38.610917, 38.631526)(-10.825707, -10.84311, -10.860877, -10.85217, -10.839338)
于 2014-11-20T11:04:00.783 に答える
0

map関数zip*stuple 演算子を使用します。

l = [(38.621833, -10.825707),
 (38.572191, -10.84311),      
 (38.580202, -10.860877),
 (38.610917, -10.85217),
 (38.631526, -10.839338)]
x= map(list, zip(*l))[0]
y = map(list, zip(*l))[1]
print 'x = {},\n y = {}' .format(x,y)

 x = [38.621833, 38.572191, 38.580202, 38.610917, 38.631526],
 y = [-10.825707, -10.84311, -10.860877, -10.85217, -10.839338]

または、変数に保存したくない場合は、上記のソリューションでインデックスを使用しないでください。

map(list, zip(*l)) # will give you a nested list
于 2014-11-20T11:01:14.460 に答える
0

あなたのLISTは 2 つのリストから拡張されています。と

for i in range(len(LIST)):

ループを正確に 2 回実行します。

for ループで問題を解決したい場合は、それらをネストする必要があります。

#declare x, y as lists
x = []
y = []
for i_list in LIST:
    #outer for-loop runs 2 times - one for each list appended to LIST.
    #1st run: i_list becomes LIST[0]
    #2nd run: i_list becomes LIST[1]
    for touple in i_list:
        #inner for-loop runs as often as the number of tuple appended to i_list
        #touple becomes the content of i_list[#run]
        x.append(touple[0]) #adds x-value to x
        y.append(touple[1]) #adds y-value to y

インデックスを使用する場合は、次を使用します。

for i in range(len(LIST)):
    for j in range(len(LIST[i])):
        x.append(LIST[i][j][0])
        y.append(LIST[i][j][1]])

x 値または y 値を追加するためにインデックスを操作しない方が、はるかに簡単に記述でき (List-Structure とインデックスの正しい使用法に関する複雑な考えを省くことができます)、extern の人々がコードを読む場合にはるかに理解しやすくなります。

于 2014-11-20T11:23:47.403 に答える