アプリ版:「スタンプのみでお礼する」機能のリリースについて

言語はjava,Pythonなんでも構いません。

データは以下のようになっている。
[
{2,3,4},
{1,7,8},
{3,4,5}
]

配列の各それぞれの要素1つ目(2,1,3)をページ数として出力したい。
出力結果イメージは以下の通り。
234
234
178
345
345
345

計6ページとなる

質問者からの補足コメント

  • phpのchunk等を使って出力しても構いません

      補足日時:2022/10/12 09:41

A 回答 (5件)

> 日本語に訳すとそれぞれどのような意味でしょうか。


> (i[0] * ''.join(map(str, i + ['\n'])), end='') を教えてください。

まず、ちとPythonはおかしなトコがあって、文字列 -> リストの変換は想定通りなんだけど、逆にリスト -> 文字列の変換はヘンな書き方になる。
言い換えると、「変換関数」同士で対称性がない、って事だ。
リスト -> 文字列の変換は次のようになる。

''.join(リスト)

例えば['a', 'b', 'c']と言う文字列のリストから文字列を生成するには次のように書く。

''.join(['a', 'b', 'c'])
=> 'abc'

Pythonのリストと文字列を相互に変換する方法まとめ:
https://www.headboost.jp/python-strings-into-a-l …

一方、これを素直に使えるには、joinメソッドに与えるリストは「文字列のリスト」じゃないとならない。
しかし、余題のリストは整数のリストだ。

例: [2,3,4]

従って、整数のリストを文字列のリストに変換しないといけない。
整数を文字列に変換するのはPythonでは簡単に行える。

例:
str(2)
=> '2'

つまり、整数のリスト[2,3,4]の要素を全部文字列に変換するにはマッピング関数mapを使って各要素を文字列に直せばいい。

例:
map(str, [2, 3, 4])
=> <map object at 0x7fd75dfc3160>

返り値はイテラブルになっているが構わない。listを使ってリスト化すると文字列のリストが得られている。

Pythonのイテラブルとは何かを現役エンジニアが解説【初心者向け】:
https://magazine.techacademy.jp/magazine/28147

Pythonのmap関数の使い方を徹底解説初心者向け:
https://www.modis.co.jp/candidate/insight/column …

つまり、

''.join(map(str, [2, 3, 4]))
=> '234'

と文字列を生成するが、ケツに改行文字を付加しておきたい。
そこで、mapに与えるリストを次のようにする。

''.join(map(str, [2, 3, 4] + ['\n']))
=> '234\n'

[2, 3, 4] + ['\n'] は [2, 3, 4, '\n'] と言うリストを返すので、これを利用して最終的には改行文字付きの文字列にしてしまう。

さて、リスト[2, 3, 4]はデータ

[
[2,3,4],
[1,7,8],
[3,4,5]
]

から引っこ抜いてきたリストだ。データの最初のリストだな。
要はデータを順次処理してリストを1つづつ引っこ抜いてくればイイ、ってこった。
題意から言うと、各リストの先頭は「ページ数」じゃないといけない。
つまり、データからリストを順次引っこ抜いてきて、そのリストをiと表現すれば、

i[0]

は常に「ページ数」と言う意味になる。
これを利用して、Pythonのポリモーフィズム

Pythonで分かる!ポリモーフィズムとは?使い方について解説:
https://www.sejuku.net/blog/90417

に従って「文字列の掛け算」を実行する。
例えば文字列が'234\n'だとして、

2 * '234\n'
=> '234\n234\n'

3 * '234\n'
=> '234\n234\n234\n'

となる。Pythonの文字列では、「掛けた分だけ」同じ文字列が結合されていく。
これを利用すれば、

各リストの先頭 * ''.join(map(str, 各リスト + ['\n']))

で、各リストの先頭の数の分だけ同じ文字列を連結した文字列が生成出来る。

あとは、Pythonのprintはデフォルトでは勝手に改行文字を付加するが、文字列本体に改行文字がある場合、これが邪魔になるケースがある(今回のケースだ)。
そんな時には、オプショナル引数で、endに''を与えるとprint側で改行文字を付ける事がない。
    • good
    • 0

No.1です。


PHPはできません。

#!/usr/bin/perl

my @x = ([2,3,4],[1,7,8],[3,4,5]);
for (my $i=0; $i < 3; $i++){
for (my $j=0;$j < $x[$i][0];$j++){
print"$x[$i][0]$x[$i][1]$x[$i][2]\n";
}
}
    • good
    • 0

Python(#2の修正):


[print(i[0] * ''.join(map(str, i + ['\n'])), end='') for i in [[2, 3, 4], [1, 7, 8], [3, 4, 5]]]
    • good
    • 0
この回答へのお礼

ありがとうございます。
日本語に訳すとそれぞれどのような意味でしょうか。
(i[0] * ''.join(map(str, i + ['\n'])), end='') を教えてください。

お礼日時:2022/10/12 10:18

[print(i[0] * ''.join(map(str, i + ['\n'])), end='') for i in [[2

]
    • good
    • 0

#include <stdio.h>



int main()
{
int test[3][3] = {{2,3,4},{1,7,8},{3,4,5}};
int i,j;
for(i=0;i<3;i++){
for(j=0;j<test[i][0];j++){
printf("%d%d%d\n",test[i][0],test[i][1],test[i][2]);
}
}
return 0;
}
    • good
    • 0
この回答へのお礼

ありがとうございます。
PHPでのコーディングはできますでしょうか。

お礼日時:2022/10/12 10:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!