幼少期から台湾の衛星放送でホークス戦の中継を観戦した縁で、ホークスのファンになった。好物はパンケーキで、専門店に足を運ぶほどである。ホークス時代の2009年から2014年までは、鳥越裕介内野守備走塁コーチ(当時)の勧めで、ホークスのOBである井口資仁（当時はロッテの内野手）がオフシーズン中に主導していた自主トレーニングに参加。そのトレーニングに同行していた鳥谷敬から、筋力トレーニングへ取り組む姿勢も学んだという。ちなみに井口は、2017年シーズンで現役を引退すると、2018年シーズンからロッテの一軍監督へ就任。鳥越も、一軍ヘッド兼内野守備走塁コーチとして、ロッテに移籍した。李がロッテとの入団交渉中であることを伝えた台湾の報道では、前述した合同トレーニングや、NPBのオフシーズンに現地で開催する野球教室を通じて井口と親しい関係にあることが取り上げられていた。
プロ入り前は背筋力230kgを活かした高校通算53本塁打、打率.525のパワフルな打撃が持ち味だった。遠投は110メートル、50メートル走のタイムは6秒3だった。ドラフト指名当時、小川一夫スカウト部長からは「ハンドワークが非常に柔らかい選手。右にも左にも打てる」「長打力や体の強さは井口資仁に匹敵する能力を持っている」と評価されていた。ソフトバンク時代の2013年には、当時の二軍打撃コーチ・大道典良から、「チームで数少ない右の長距離打者」と評価されていた。ちなみに、2014年までの8年間には、ウエスタン･リーグで通算打率.271、出塁率.346を記録。35.8打数に1本の割合（1432打数40本塁打）で本塁打を放っていた。その一方で、盗塁成功率は低く、2014年までに通算34回の企図で15回の成功にとどまっていた。同年までの守備率は、一塁手として.988（通算93試合）、二塁手として.978（通算259試合）、三塁手として.950（通算243試合）。2010年のみ、ウエスタン・リーグ公式戦10試合で、左翼の守備に就いた。
NPBへの復帰を模索。2017年12月に台湾の野球教室へ参加した際に、千葉ロッテマリーンズへの入団交渉に臨んでいることを明らかにした。2018年2月1日から、ロッテの石垣島春季キャンプへ参加。ソフトバンク時代のチームメイトだった大隣憲司、前ベースボール・チャレンジ・リーグ・富山サンダーバーズのフランシスコ・ペゲーロと共に入団テストを受験した。
関数の多重定義をサポートしない言語では、たとえ関数の引数の型や数によらずアルゴリズムすなわち本質的な内容がまったく同じでも、引数の型や数ごとに関数をそれぞれ定義する場合は同じ名前が使えず、引数に応じた名前をそれぞれ付ける必要があり、呼び出すときも引数に応じて使い分ける必要がある。C言語での例を以下に示す。#include <stdio.h>#include <math.h>float vector2f_length(float x, float y) { return sqrtf(x * x + y * y); }double vector2d_length(double x, double y) { return sqrt(x * x + y * y); }float vector3f_length(float x, float y, float z) { return sqrtf(x * x + y * y + z * z); }double vector3d_length(double x, double y, float z) { return sqrt(x * x + y * y + z * z); }int main(void){  printf("%f\n", vector2f_length(1.0f, -1.0f));  printf("%f\n", vector2d_length(1.0, 2.0));  printf("%f\n", vector3f_length(1.0f, -1.0f, 1.0f));  printf("%f\n", vector3d_length(1.0, 2.0, -1.0));}ベクトルの長さを計算する関数を、型および次元ごとに命名している。一方、関数の多重定義をサポートする言語では、関数のシグネチャが異なれば同じ名前を使うことができる。関数には本質的な名前だけを付ければよく、呼び出すときも引数によらず一様に記述できる。C++での例を以下に示す。#include <cstdio>#include <cmath>float vector_length(float x, float y) { return std::sqrt(x * x + y * y); }double vector_length(double x, double y) { return std::sqrt(x * x + y * y); }float vector_length(float x, float y, float z) { return std::sqrt(x * x + y * y + z * z); }double vector_length(double x, double y, float z) { return std::sqrt(x * x + y * y + z * z); }int main(void){  printf("%f\n", vector_length(1.0f, -1.0f)); // (float, float) バージョンが呼ばれる。  printf("%f\n", vector_length(1.0, 2.0)); // (double, double) バージョンが呼ばれる。  printf("%f\n", vector_length(1.0f, -1.0f, 1.0f)); // (float, float, float) バージョンが呼ばれる。  printf("%f\n", vector_length(1.0, 2.0, -1.0)); // (double, double, double) バージョンが呼ばれる。}なお、C++11規格では、2次元ベクトルの長さを求める標準関数として、多重定義されたstd::hypot()関数が用意されている。C++17では3次元ベクトルバージョンも追加されている。