2017-09-26 21 views
1

私はPythonを使ってプログラミングするのが初めてです。機械をプログラミングするためには、私はg-codeで作業する必要があります。したがって、Pythonプログラムを使用してデータからgcodeを読み込みます。今私は、次のようなコードを結合する必要があります。2行を1行ずつ組み合わせる方法

CODE1:

  • LINE1(a、b、c)は、
  • LINE2(D、E、F)

CODE2:

  • LINE1(G、H、I)
  • LINE2(J、K、L)

結果は

  • LINE1(A、B、C、G、H、I)
  • LINE2(D、E、F、J、K、L)
ようになります

私が今使っているコードは、基本的に両方のコードを作成するだけです。これはそれをマージしません。私は何とか "numpy"で作業しなければならないことを知っていますが、私は立ち往生しました。

import dxfgrabber 
import numpy as np 

left = dxfgrabber.readfile('data1') 
right = dxfgrabber.readfile('data2') 


def createcode(code): 
    for i in code.entities: 
     for p in i.points: 
      mylist = np.array(p) 
      print(mylist) 


createcode(left) 
createcode(right) 
+0

?なぜリストはありませんか? – Eduardo

+0

これも可能なら確か。しかし、私はどのように "リスト"を作成するためのループのためにわからない –

+0

どのようなタイプのデータが**左**と**右** variblesにありますか? – Eduardo

答えて

0

この内容はどうですか?

def createcode(code): 
    return [[p for p in i.points] for i in code.entities] 

次の例のように、両方のケースのために、このfuncionを適用することができます。

a = createdcode(left) 
b = createdcode(right) 

、このインスタンスでは、あなたが2つのリストを持っています。そして、あなたがそれらを組み合わせることができます。

c = [u + j for u, j in zip(a, b)] 

を次に、あなたがそれらを印刷することができます

for i in c: 
    print(i) 
+0

ループによって生成される出力は次のようlookes: '[10.0、10.0、0.0] [90.0、10.0、0.0] [90.0、90.0、0.0] [10.0、90.0、0.0]' 及びIは必要最後の各行に "正しい"データのコードを入れてください。正しいデータは同じ形式です。 –

+0

あなたの機能に基づいて答えを更新します。正しいデータのために同じ関数で反復処理が必要ですか? _right data_を追加すると、すべてのリストに6つの要素が含まれている必要がありますか? わかりました。答えを待ってください。 – Eduardo

+0

私はもう一つの答えで説明しようとしました。おそらくこれはあなたが問題を理解するのに役立ちます。 –

1

考える

import itertools as it 

import numpy as np 


left = tuple("abc"), tuple("def") 
right = tuple("ghi"), tuple("jkl") 

コード

マージは、単純なチェーンで実現することができます:

[tuple(it.chain.from_iterable(i)) for i in zip(left, right)] 
# [('a', 'b', 'c', 'g', 'h', 'i'), ('d', 'e', 'f', 'j', 'k', 'l')] 

ここでは、項目は一緒に圧縮され、リスト内包されます。 numpyのアレイを印刷する単一の関数(または任意の所望の出力)に拡張

は、次のように試みることができる:ここ

def merge(*iterables): 
    """Print merged iterables.""" 
    for i in zip(*iterables): 
     result = tuple(it.chain.from_iterable(i)) 
     result = np.array(result) 
     print(result) 

merge(left, right) 
# ['a' 'b' 'c' 'g' 'h' 'i'] 
# ['d' 'e' 'f' 'j' 'k' 'l'] 

イテレート可能オブジェクトの任意の数が一緒にzip圧縮することができます。あなたがnumpyのを使用する必要が

デモ

lt = [(10.0, 10.0, 0.0), (90.0, 10.0, 0.0), (90.0, 90.0, 0.0), (10.0, 90.0, 0.0)] 
rt = [(20.0, 3.0, 6.0), (16.0, 6.0, 9.0), (5.0, 7.0, 7.0), (9.0, 2.0, 8.0)] 

merge("abcd", lt, rt) 
# ['a' '10.0' '10.0' '0.0' '20.0' '3.0' '6.0'] 
# ['b' '90.0' '10.0' '0.0' '16.0' '6.0' '9.0'] 
# ['c' '90.0' '90.0' '0.0' '5.0' '7.0' '7.0'] 
# ['d' '10.0' '90.0' '0.0' '9.0' '2.0' '8.0'] 
+0

ありがとうございました。出力内の '0.0 'をすべて削除する簡単な方法はありますか? –

+0

フロート出力はフロート入力から出力されます。入力を '[lt] [i] in'の '[tuple(map(int、i))]を介して整数として前処理することができます。 – pylang

+0

'merge(" abcd "、lt [0]、rt [0])'角括弧内の数字は何ですか?私が4行以上のリストを持っていれば、何とか動かないようです。 –

関連する問題